C++编程实现从注册表中获取程序安装路径并调用exe文件。
2012-10-08 14:33
357 查看
最近用c++做利用WINAPI启动应用程序的测试, 一番周折之后,成功解决 利用注册表函数获取程序安装路径的宽字符和WINEXEC方法参数不一致的问题。长话短说,附上代码如下:
#include <iostream> #include <windows.h> using namespace std; #define RTN_ERROR 13 #pragma comment(lib, "advapi32") int main(void) { #define MY_BUFSIZE 132 // Arbitrary initial value. // Dynamic allocation will be used. HKEY hKey; TCHAR szProductType[MY_BUFSIZE]; memset(szProductType,0,sizeof(szProductType)); DWORD dwBufLen = MY_BUFSIZE; LONG lRet; // 下面是打开注册表, 只有打开后才能做其他操作 lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, // 要打开的根键 TEXT("SOFTWARE\\TENCENT\\QQ2009"), // 要打开的子子键 0, // 这个一定要为0 KEY_QUERY_VALUE, // 指定打开方式,此为读 &hKey); // 用来返回句柄 if(lRet != ERROR_SUCCESS) // 判断是否打开成功 return 1; //下面开始查询 lRet = RegQueryValueEx(hKey, // 打开注册表时返回的句柄 TEXT("Install"), //要查询的名称,qq安装目录记录在这个保存 NULL, // 一定为NULL或者0 NULL, (LPBYTE)szProductType, // 我们要的东西放在这里 &dwBufLen); if(lRet != ERROR_SUCCESS) // 判断是否查询成功 return 1; RegCloseKey(hKey); char ansi[MY_BUFSIZE]; WideCharToMultiByte(CP_ACP, 0, szProductType, -1, ansi, sizeof(ansi), NULL, NULL); strcat(ansi,"\\Bin\\QQ.EXE"); cout<<ansi; WinExec(ansi,SW_SHOW); }在这里,szProductType是TCHAR类型,也就是宽字符,而winexec的第一个参数要求是char*,所以就出问题了。使用WideCharToMultiByte方法可以完美解决这个问题。运行程序后,就会出现qq的启动界面。
相关文章推荐
- C++编程实现从注册表中获取程序安装路径并调用exe文件
- C++编程实现从注册表中获取程序安装路径并调用exe文件
- C++编程实现从注册表中获取程序安装路径并调用exe文件
- 工作问题积累(九)C++:实现从注册表中获取程序安装路径并调用exe文件
- C#(WPF)程序将Debug中的.exe文件放入注册表中启动,获取错误的当前路径--解决方案
- C#(WPF)程序将Debug中的.exe文件放入注册表中启动,获取错误的当前路径--解决方案
- 调用Windows接口访问注册表来获取程序安装路径
- C# 获取常见软件的安装路径(调用注册表)
- 获取EXE文件安装后的路径
- unity 实现另一个unity软件的安装工具(4)——unity调用外部程序,三种路径方式
- 获取EXE文件安装后的路径
- 如何使用vs对程序进行打包?怎么通过注册表获取安装路径?
- Inno Setup 注册表获取程序安装路径
- C# 获取常见软件的安装路径(调用注册表)
- C# 获取常见软件的安装路径(调用注册表)
- c++获取注册表中程序的安装路径
- C# 获取常见软件的安装路径(调用注册表)
- 用MFC实现代码获取当前EXE 执行的绝对路径,用于扩展相对路径扩展,以及计算文件大小功能
- 读注册表获取程序安装路径