前回、壁紙の変更についてお世話になりましたkarukiです。
今回も壁紙の変更についての質問があります。
CDの中にプログラムと変更する壁紙をいれて、CDを入れたら壁紙を変更する
プログラムを作っているのですが、F:\変更する壁紙.bmpのように指定しておくとうまくいきますが、認識するドライブによってFがEやGに変わってしまいうまく変更できません。FがEやGに変わっても壁紙を変更するにはどうしたらよいのでしょうか?長文失礼しました。
>CDの中にプログラム
中に入ってるなら、exenameからドライブ名を取得できるのでは?
るるとん@Kさん、申し訳ありません。
私の説明に悪いところがありましたので修正いたします。
procedure TForm1.FormCreate(Sender: TObject);
begin
SystemParametersInfo (SPI_SETDESKWALLPAPER, 0,
PChar('F:\変更する壁紙.bmp'), SPIF_UPDATEINIFILE);
end;
end.
私は、上記のように壁紙変更のプログラムを作っています。
コード内でドライブをFと指定してるため、ほかのドライブ(EやGなど)だと
画像を取得できず画像がなしになってしまいます。
認識させるドライブによってコード内で指定したドライブも変更させるのにはどうしたらいいのでしょうか?が正しい説明です。ご迷惑をお掛けしました。
るるとん@Kさんの言うexenameからドライブ名を取得というのはどうやればいいのでしょうか?自分なりに調べてるのですがやり方がわかりません。長文失礼しました。
> ...exenameからドライブ名を取得というのはどうやればいいのでしょうか?
ExtractFileDrive(Application.ExeName);
ではないかしら。
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;
通りすがりさんの回答と重複しますが、実行ファイルがCDに入っているみたいですから、
var
S: string;
begin
S := IncludeTrailingPathDelimiter(ExtractFileDrive(ParamStr(0)));
こんな感じでよいのでは?
ドライブが「G」ならSには「G:\」が取得されます。
ParamStr(0)でもApplication.ExeNameでもお好きな方をどうぞ
通りすがりさん、にゃ〜さん、ふぐちゃんさん、るるとん@Kさん、ありがとうございます。
解決しました。
ツイート | ![]() |