CDを入れたドライブを取得してプログラムを実行するには?

解決


karuki  2004-05-28 20:21:55  No: 9254  IP: 192.*.*.*

前回、壁紙の変更についてお世話になりましたkarukiです。
今回も壁紙の変更についての質問があります。
CDの中にプログラムと変更する壁紙をいれて、CDを入れたら壁紙を変更する
プログラムを作っているのですが、F:\変更する壁紙.bmpのように指定しておくとうまくいきますが、認識するドライブによってFがEやGに変わってしまいうまく変更できません。FがEやGに変わっても壁紙を変更するにはどうしたらよいのでしょうか?長文失礼しました。

編集 削除
るるとん@K  2004-05-28 21:03:29  No: 9255  IP: 192.*.*.*

>CDの中にプログラム
中に入ってるなら、exenameからドライブ名を取得できるのでは?

編集 削除
karuki  2004-05-28 22:53:22  No: 9256  IP: 192.*.*.*

るるとん@Kさん、申し訳ありません。
私の説明に悪いところがありましたので修正いたします。
procedure TForm1.FormCreate(Sender: TObject);
begin
  SystemParametersInfo (SPI_SETDESKWALLPAPER, 0,
      PChar('F:\変更する壁紙.bmp'), SPIF_UPDATEINIFILE);
end;
end.
私は、上記のように壁紙変更のプログラムを作っています。
コード内でドライブをFと指定してるため、ほかのドライブ(EやGなど)だと
画像を取得できず画像がなしになってしまいます。
認識させるドライブによってコード内で指定したドライブも変更させるのにはどうしたらいいのでしょうか?が正しい説明です。ご迷惑をお掛けしました。
るるとん@Kさんの言うexenameからドライブ名を取得というのはどうやればいいのでしょうか?自分なりに調べてるのですがやり方がわかりません。長文失礼しました。

編集 削除
通りすがり  2004-05-29 00:12:32  No: 9257  IP: 192.*.*.*

> ...exenameからドライブ名を取得というのはどうやればいいのでしょうか?
ExtractFileDrive(Application.ExeName);
ではないかしら。

編集 削除
にゃ〜  2004-05-29 01:05:49  No: 9258  IP: 192.*.*.*

CDドライブが一つならこれでいけるにゃ〜
複数なら全部のCDドライブの中のファイル探さにゃいとダメだにゃ〜

function GetCDRootDir: string;
var
  DriveBits, BitMask : DWORD;
  i : Integer;
begin
  result := 'A:\';
  DriveBits := GetLogicalDrives;
  BitMask := 1;
  for i:=1 to 26 do begin
    if (DriveBits and BitMask) <> 0 then begin
      if GetDriveType(PChar(result)) = DRIVE_CDROM then break;
    end;
    BitMask := BitMask shl 1;
    Inc(result[1]);
  end;
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  SystemParametersInfo (SPI_SETDESKWALLPAPER, 0,
    PChar(GetCDRootDir +'変更する壁紙.bmp'), SPIF_UPDATEINIFILE);
end;

編集 削除
ふぐちゃん  2004-05-29 08:15:21  No: 9259  IP: 192.*.*.*

通りすがりさんの回答と重複しますが、実行ファイルがCDに入っているみたいですから、

var
  S: string;
begin
  S := IncludeTrailingPathDelimiter(ExtractFileDrive(ParamStr(0)));

こんな感じでよいのでは?
ドライブが「G」ならSには「G:\」が取得されます。

編集 削除
るるとん@K  2004-05-29 12:13:34  No: 9260  IP: 192.*.*.*

ParamStr(0)でもApplication.ExeNameでもお好きな方をどうぞ

編集 削除
karuki  2004-05-29 18:08:36  No: 9261  IP: 192.*.*.*

通りすがりさん、にゃ〜さん、ふぐちゃんさん、るるとん@Kさん、ありがとうございます。
解決しました。

編集 削除