C++编程实现从注册表中获取程序安装路径并调用exe文件

C++编程实现从注册表中获取程序安装路径并调用exe文件



利用注册表函数获取程序安装路径的宽字符和WINEXEC方法参数不一致的问题。附上代码如下:
#include
#include
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); //调用exe文件 可以给被调用的exe文件传递参数值 即命令行形式
}

在这里,szProductType是TCHAR类型,也就是宽字符,而winexec的第一个参数要求是char*,所以就出问题了。使用WideCharToMultiByte方法可以完美解决这个问题。运行程序后,就会出现qq的启动界面。

参考:
C++ Builder注册表编程       三、注册表编程实例2—— 编写输入法调序器
http://www.it.com.cn/f/edu/0410/14/35074.htm
C++编程实现从注册表中获取程序安装路径并调用exe文件
http://blog.sina.com.cn/s/blog_472a9f0c0101b0g1.html

你可能感兴趣的:(C++编程实现从注册表中获取程序安装路径并调用exe文件)