4

Windows 7 (x64) と Delphi 2010 を使用しています。

スタート メニューをエミュレートするコンポーネントを作成しています。ただし、次の問題に遭遇しました。

  1. でショートカット (.lnk ファイル) を開こうとすると、 %ProgramFiles%がショートカットのターゲット パスの一部である場合はShellExecute常に失敗します (C: の代わりにC :\Program Files (x86)フォルダーを参照します)。 \プログラム ファイル);
  2. ShGetFileInfo%ProgramFiles%がアイコン ファイルへのパスの一部である場合、システム イメージ リスト内のアイコンの正しいインデックスを抽出できません(上記と同じ問題)。

上記の問題に対する回避策はありますか、それともネイティブ 64 ビット Delphi が利用可能になるまで待つ必要がありますか?

4

3 に答える 3

2

Wow64DisableWow64FsRedirection前後に電話したほうがいいと思いますWow64RevertWow64FsRedirection

于 2010-06-26T18:28:38.657 に答える
1

次の環境変数は、64 ビット マシンでは常に正しい方向を指し、32 ビット マシンでは定義されません。

32 ビット アーキテクチャの 32 ビット シェルから:

C:\>echo %processor_architecture%
x86
C:\>echo %programfiles(x86)%
%programfiles(x86)%
C:\>echo %programw6432%
%programw6432%
C:\>echo %programfiles%
C:\Program Files

64 ビット アーキテクチャの 32 ビット シェルから:

C:\>echo %processor_architecture%
x86
C:\>echo %programfiles(x86)%
C:\Program Files (x86)
C:\>echo %programw6432%
C:\Program Files
C:\>echo %programfiles%
C:\Program Files (x86)

64 ビット シェルから:

C:\>echo %processor_architecture%
AMD64
C:\>echo %programfiles(x86)%
C:\Program Files (x86)
C:\>echo %programw6432%
C:\Program Files
C:\>echo %programfiles%
C:\Program Files

アプリケーションを実行する前にそれらを置き換えてみてください。

于 2010-06-27T13:40:37.940 に答える
1

わかりました、問題を示す小さな例です。

次のパラメーターを使用して ShellExecute を呼び出します。

ShellExecute(Handle, 'open', 'C:\Users\...\Internet Explorer (64-bit).lnk', nil, nil, SW_SHOWNORMAL);

Internet Explorer (64 ビット).lnkのターゲットは次のとおりです。

C:\Program Files\Internet Explorer\iexplore.exe

ただし、 iexplore.exeの 32 ビット バージョンはそれでも開かれます。この場合、パスは%ProgramFiles%を使用していないため、内部的に C: \Program FilesC:\Program Files (x86)ShellExecuteに変換します。代わりにiexplore.exeの64ビットバージョンを開く方法がわかりません。

別の問題として、 を呼び出した後Wow64DisableWow64FsRedirectionShellExecuteフォルダーが開かなくなります。

于 2010-06-27T13:08:10.707 に答える