试图通过搜索注册表来找到excel的路径
Trying to find the path to excel by searching the registry
我正在尝试使用注册表找到Excel的路径,并尝试调整我在互联网上找到的一些代码。我使用的是64位Win7,并已使用regedit确认密钥在那里。
#include <windows.h>
#include <iomanip>
#include <iostream>
using namespace std;
int main()
{
HKEY hKey = 0;
char buf[255] = {0};
DWORD dwType = 0;
DWORD dwBufSize = sizeof(buf);
const char* subkey = "SOFTWARE\Classes\Excel.Application\CLSID";
if( RegOpenKey(HKEY_LOCAL_MACHINE,subkey,&hKey) == ERROR_SUCCESS)
{
dwType = REG_SZ;
if( RegQueryValueEx(hKey,"default",0, &dwType, (BYTE*)buf, &dwBufSize) == ERROR_SUCCESS)
{
cout << "key value is '" << buf << "'n";
}
else
cout << "can not query for key valuen";
RegCloseKey(hKey);
}
else
cout << "Can not open keyn";
cin.ignore();
return 0;
}
有人知道为什么不起作用吗?谢谢James
尝试更改
RegQueryValueEx(hKey,"default",0, &dwType, (BYTE*)buf, &dwBufSize) == ERROR_SUCCESS)
带有
RegQueryValueEx(hKey, NULL, 0, &dwType, (BYTE*)buf, &dwBufSize) == ERROR_SUCCESS)
如果想要"默认"值,则应在lpValueName字段中传递NULL或空字符串。
此外,如果你的应用程序不是64位的,并且你在64位操作系统中运行,你应该检查RegOpenKeyEx函数上的KEY_WOW64_64KEY标志,以访问你想要的密钥。
几乎所有的Windows API函数在失败时,都会设置更详细的错误代码,您可以通过调用GetLastError()
获取更多详细信息。您应该在对RegOpenKey()
的调用失败后调用它。
在您的示例中,RegOpenKey()
可能由于访问被拒绝错误而失败。RegOpenKey()
打开具有完全读/写/删除访问权限的注册表项。Windows 7上的标准用户没有对HKLM的写入或删除访问权限,因此RegOpenKey()
将失败。
您应该使用RegOpenKeyEx(),它将允许您指定只读访问,如下所示。
RegOpenKeyEx(HKEY_LOCAL_MACHINE, subkey, 0, KEY_READ, &hKey)
PS。当问像上面这样的问题时,你应该更多地描述代码是如何失败的。在上面的示例中,您应该包括哪一行/函数调用失败。例如"当我使用此代码时,对RegOpenKey的调用失败。
相关文章:
- 如何将更多文件夹添加到c++include路径
- 带有特殊路径部分的"std::filesystem::weakly_canonical"失败
- C++A*算法并不总是在路径中具有目标节点
- 从函数角度看ID到文件路径的内部与外部映射
- boost xml parsingl将xml的路径作为变量发送
- 对于MacOS上的G++,如何添加默认的include目录/usr/local/include和默认的库搜索路径/usr
- 如何使用cppcheck处理半相对包含路径
- 在C++中设置基于操作系统的文件路径
- 基于编译器选项的编译二进制路径
- 按边长度递归搜索图中所有可行路径
- 使用变量值作为 PlaySound 中的路径
- 如何转换真实路径 CString c++
- 从 GUID 获取 USB 卷路径
- 查找 GCD:并非所有控制路径都返回值
- C++17 文件系统::remove_all 带有通配符路径
- 在带有尾部斜杠的路径上返回 std::filesystem::create_directories() 的值
- 获取当前正在运行的 exe 名称(不是路径)
- 如何从 Skia 路径几何体中获取网格?
- CMake 错误"源似乎不包含 CMakeLists.txt",路径/库连接问题
- 试图通过搜索注册表来找到excel的路径