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

解決


karuki  2004-05-29 05:21:55  No: 9254

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


るるとん@K  2004-05-29 06:03:29  No: 9255

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


karuki  2004-05-29 07:53:22  No: 9256

るるとん@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 09:12:32  No: 9257

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


にゃ〜  2004-05-29 10:05:49  No: 9258

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 17:15:21  No: 9259

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

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

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


るるとん@K  2004-05-29 21:13:34  No: 9260

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


karuki  2004-05-30 03:08:36  No: 9261

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加