Visual c++ SHGetSpecialFolderPath错误

Visual c++ SHGetSpecialFolderPath错误,visual-c++,Visual C++,我想获得program files文件夹的位置,因此我使用 SHGetSpecialFolderPath(NULL,Path_variable,CSIDL_PROGRAM_FILES,FALSE) 我看这里没有什么问题,但我得到了错误 错误C2065:“CSIDL_程序_文件”:未声明的标识符 我使用的是VC++6.0,操作系统是Win7。这里有什么问题?。如果我使用Visual Studio 2005运行相同的代码,我不会得到任何错误。这是问题的替代方案,您可以使用它 尝试读取注册表项 HK

我想获得program files文件夹的位置,因此我使用

SHGetSpecialFolderPath(NULL,Path_variable,CSIDL_PROGRAM_FILES,FALSE)
我看这里没有什么问题,但我得到了错误

错误C2065:“CSIDL_程序_文件”:未声明的标识符


我使用的是VC++6.0,操作系统是Win7。这里有什么问题?。如果我使用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应用程序中使用VS 6.0 SP3在XP SP3上对其进行了测试,它的工作非常出色。 为了在早期系统上工作,您必须安装IE4或更高版本

vikky:

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);
您的代码在VS 6.0中不起作用。 CRegKey的QueryStringValue成员不存在

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

您是否在win7或其他操作系统中使用vs05?在XP中使用VS,但当我在XP中尝试使用vc++6时,会出现相同的错误。一旦尝试将0x0026放在if第3个参数的位置,我希望它会起作用!我试过了,错误仍然存在。如何访问注册表项..?注册表项是CRegKey类..的对象吗。。?你是否在vc6.0中测试过这段代码,同样的问题它在vs2005 bt中工作,而不是在vc6.0中。是的,对不起,我忘了:P现在看看编辑部分…………并包括这一行#包括tht ok,作为一名程序员,我应该知道tht。