0

我想获取程序文件文件夹的位置,所以我正在使用

SHGetSpecialFolderPath(NULL,Path_variable,CSIDL_PROGRAM_FILES,FALSE)

我在这里没有看到任何问题,但我收到了错误

错误 C2065:“CSIDL_PROGRAM_FILES”:未声明的标识符

我使用的是 VC++ 6.0,操作系统是 WIN 7。这里有什么问题?如果我使用 Visual Studio 2005 运行相同的代码,我不会收到任何错误。

4

2 回答 2

0

这是您的问题的替代方案,您可以使用它

尝试读取注册表项

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);

现在缓冲区将包含路径

有关更多信息,请参见此处

于 2012-10-22T07:00:56.850 回答
0

您能否包括用于检索此文件夹的整个代码段?

我刚刚在 MFC 应用程序中使用 XP Sp3 上的 VS 6.0 SP3 对其进行了测试,它就像一个魅力。要在较早的系统上工作,您必须安装 IE 4 或更高版本。

维基:

您的代码将无法在 VS 6.0 中运行。CRegKey 的 QueryStringValue 成员不存在。

此外,我认为使用 SHGetSpecialFolderPath 应该可以。此外,注册表可以更改,但 SHGetSpecialFolderPath 调用的结果不会更改。

于 2012-10-23T19:59:02.310 回答