我想获取程序文件文件夹的位置,所以我正在使用
SHGetSpecialFolderPath(NULL,Path_variable,CSIDL_PROGRAM_FILES,FALSE)
我在这里没有看到任何问题,但我收到了错误
错误 C2065:“CSIDL_PROGRAM_FILES”:未声明的标识符
我使用的是 VC++ 6.0,操作系统是 WIN 7。这里有什么问题?如果我使用 Visual Studio 2005 运行相同的代码,我不会收到任何错误。
我想获取程序文件文件夹的位置,所以我正在使用
SHGetSpecialFolderPath(NULL,Path_variable,CSIDL_PROGRAM_FILES,FALSE)
我在这里没有看到任何问题,但我收到了错误
错误 C2065:“CSIDL_PROGRAM_FILES”:未声明的标识符
我使用的是 VC++ 6.0,操作系统是 WIN 7。这里有什么问题?如果我使用 Visual Studio 2005 运行相同的代码,我不会收到任何错误。
这是您的问题的替代方案,您可以使用它
尝试读取注册表项
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ProgramFilesDir
程序文件的路径位于此位置。
编辑:
CRegKey key;
CString value = "ProgramFilesDir";
ULONG len = 255;
CString buffer;
long nError = key.Open(HKEY_LOCAL_MACHINE, "SOFTWARE\\Microsoft\\Windows\\CurrentVersion",KEY_READ);
if(nError == ERROR_SUCCESS)
{
}
key.QueryStringValue(value,buffer.GetBufferSetLength(len),&len);
现在缓冲区将包含路径
有关更多信息,请参见此处
您能否包括用于检索此文件夹的整个代码段?
我刚刚在 MFC 应用程序中使用 XP Sp3 上的 VS 6.0 SP3 对其进行了测试,它就像一个魅力。要在较早的系统上工作,您必须安装 IE 4 或更高版本。
维基:
您的代码将无法在 VS 6.0 中运行。CRegKey 的 QueryStringValue 成员不存在。
此外,我认为使用 SHGetSpecialFolderPath 应该可以。此外,注册表可以更改,但 SHGetSpecialFolderPath 调用的结果不会更改。