掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
CLSIDでの呼び出しで「ShellExecute」と「ファイル名を指定して実行」で結果が異なる (ID:151149)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
お世話になります。 お知恵を拝借できればありがたいです。 殆どのCLSIDキーによる特殊フォルダーの呼出しに於いて「ShellExecute」でも 「ファイル名を指定して実行」でも結果は同じなのですが、一部のキーでは動作 が異なるようです。 例えば「システムアイコン」を表示する CLSID'{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}\SystemIcons'なのですが 「ファイル名を指定して実行」で 'shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}\SystemIcons' は「システムアイコン」が正常に表示されます。 ところが「ShellExecute」では表示されません。 procedure TForm1.Button1Click(Sender: TObject); begin var StrTxt := 'shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9} \SystemIcons'; ShellExecute(Self.Handle, '', PChar(StrTxt), nil, nil, SW_SHOW); //ERROR :2・・・ ERROR_FILE_NOT_FOUND 結果何も表示されません。 end; パラメータと分けてみます。 procedure TForm1.Button1Click(Sender: TObject); begin var StrTxt := 'shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9}'; var StrPrm := '\SystemIcons'; var nRet := ShellExecute(Self.Handle, '', PChar(StrTxt), PChar(StrPrm), nil, SW_SHOW); //ERROR :31・・・ SE_ERR_NOASSOC 結果何も表示されません。 end; コマンドプロンプトでも正常に呼び出せるので、バッチファイルならと試してみました。 procedure TForm1.Button1Click(Sender: TObject); begin var StrFileName := 'D:\abc.bat'; var SL := TStringList.Create; try SL.Clear; SL.Add('explorer shell:::{05d7b0f4-2121-4eff-bf6b-ed3f69b894d9} \SystemIcons'); //SL.Add(':Lbl0'); //SL.Add('DEL ' + StrFileName ); //SL.Add('IF EXIST ' + StrFileName + ' GOTO Lbl0' ); SL.SaveToFile(StrFileName); finally SL.Free; end; ShellExecute(Handle, '', PChar(StrFileName), nil, nil, SW_HIDE); end; 結果は「Documentフォルダー」が開いてしまいます。 作成されたバッチファイルを直接実行すると「システムアイコン」のフォルダーが 表示されますので問題ないようには思えるのですがよくわかりません。 他、以下のCLSIDでも同様でした。 {ファイアウォール許可されたアプリ} shell:::{4026492F-2F69-46B8-B9BF-5654FC07E423} -Microsoft.WindowsFirewall\pageConfigureApps {デスクトップの背景} shell:::{ED834ED6-4B5A-4bfe-8F11-A626DCB6A921} -Microsoft.Personalization\pageWallpaper 根本的に私が間違っているのか、環境なのかよくわかりません。 何とか、プログラムを通してCLSIDで特殊フォルダーが開ければと思います。 よろしくお願いいたします。 Windows10Pro 22H2 Delphi10,11
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.