I'm using Windows 7 (x64) and Delphi 2010.
I'm writing a component that will emulate the start menu. However, I've run into the following problems:
- If I attempt to open a shortcut (.lnk file) with
ShellExecute
, this will fail whenever %ProgramFiles% is part of the target path of the shortcut (it will then look at the C:\Program Files (x86) folder instead of C:\Program Files); ShGetFileInfo
fails to extract the correct index of the icon in the system image list if %ProgramFiles% is part of the path to the icon file (same problem as above).
Is there any workaround to the above issues or do I have to wait for native 64-bit Delphi to become available for this to work?
The following environment variables will always point to the right direction on a 64-bit machine, and will be undefined on a 32-bit machine:
from a 32-bit shell on a 32-bit architecture:
from a 32-bit shell on a 64-bit architecture:
from a 64-bit shell:
Try substituting them before running the application.
Ok, a small example that demonstrates the problem.
I invoke ShellExecute with the following parameters:
The target of Internet Explorer (64-bit).lnk is:
However, the 32-bit version of iexplore.exe is opened nonetheless. In this case the path doesn't even use %ProgramFiles%, so somehow
ShellExecute
will translate C:\Program Files to C:\Program Files (x86) internally. I have no idea how to make it open the 64-bit version of iexplore.exe instead.Another problem, after calling
Wow64DisableWow64FsRedirection
,ShellExecute
will no longer open folders.I think you should call
Wow64DisableWow64FsRedirection
before andWow64RevertWow64FsRedirection
aftyer.