【问题标题】:SHGetFolderPath() 32 bit vs 64 bitSHGetFolderPath() 32 位与 64 位
【发布时间】:2008-09-26 09:04:40
【问题描述】:
如果我在具有 CSIDL_PROGRAM_FILESx86 文件夹 id 而不是 CSIDL_PROGRAM_FILES id 的 32 位系统中使用 SHGetFolderPath api 调用会发生什么?
理论上 CSIDL_PROGRAM_FILESx86 在 64 位系统中应该映射到 C:\program files (x86),但在不存在此路径的 32 位系统中它映射到什么?
【问题讨论】:
标签:
winapi
shell
64-bit
path
32-bit
【解决方案1】:
this article on 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
【解决方案2】:
试试这个:
GetEnvironmentVariable("ProgramW6432", szBuffer, nBufferSize);
YMMV