SHGetSpecialFolderPath错误

时间:2012-10-22 06:19:42

标签: visual-c++

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

SHGetSpecialFolderPath(NULL,Path_variable,CSIDL_PROGRAM_FILES,FALSE)

我没有看到任何错误,但我收到了错误

  

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

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

2 个答案:

答案 0 :(得分: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);

现在缓冲区将包含路径

有关详细信息,请参阅here

答案 1 :(得分:0)

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

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

<强> vikky:

您的代码在VS 6.0中无效。 CRegKey的QueryStringValue成员不存在。

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