CSIDL_PROGRAM_FILES ID の代わりに CSIDL_PROGRAM_FILESx86 フォルダー ID を使用して 32 ビット システムでSHGetFolderPath API 呼び出しを使用するとどうなりますか?
理論的には、CSIDL_PROGRAM_FILESx86 はC:\program files (x86)
64 ビット システムにマップする必要がありますが、このパスが存在しない 32 ビット システムでは何にマップされますか?
さまざまなシナリオについては、MSDN のこの記事で説明されています。
下にスクロールして、「FOLDERID_ProgramFiles」というコメントを見つけます。
OS Application KNOWNFOLDERID Default Path CSIDL Equivalent 32 bit 32 bit FOLDERID_ProgramFiles %SystemDrive%\Program Files CSIDL_PROGRAM_FILES 32 bit 32 bit FOLDERID_ProgramFilesX86 %SystemDrive%\Program Files CSIDL_PROGRAM_FILESX86 32 bit 32 bit FOLDERID_ProgramFilesX64 (undefined) Not applicable Not applicable
概要: %SystemDrive%\Program Files を指します
これを試して:
GetEnvironmentVariable("ProgramW6432", szBuffer, nBufferSize);
YMMV