通过注册表寻找应用程序路径

    很多时候在调用一些应用程序之前需要先找到应用程序的路径。使用CFileFind类效率较低,如果要寻找一些已经在注册表标明路径的应用程序,通过注册表来寻找不失为一个便捷的途径。下面就是通过注册表寻找应用程序路径的相关代码(以寻找Rar.exe为例,Rar.exe是WinRar的控制台程序):

 // 打开键 
    HKEY hKEY; 
    LPCTSTR Rgspath = "WinRAR\\shell\\open\\command"; 
    LONG ret = RegOpenKeyEx(HKEY_CLASSES_ROOT, Rgspath, 0, KEY_READ, &hKEY); 
     
    if(ret != ERROR_SUCCESS) 
    {  
        RegCloseKey(hKEY); 
        return FALSE; 
    } 
    // 读取键值内容 
    DWORD dwInfoSize; 
    DWORD type = REG_SZ; 
    BYTE UserInfo[255]; 
    // zjc 08.04.24 added begin 
    /* 
    注意RegQueryValueEx最后一个参数是个双向参数,入参时表示的是前一个参数的缓冲区大小,出参时表示的是返回的大小。 
    所以最好把UserInfo的大小给dwInfoSize,防止UserInfo溢出。 
    */ 
    dwInfoSize = sizeof(UserInfo)/sizeof(BYTE);  
     
    ret = RegQueryValueEx(hKEY, NULL, NULL, &type, UserInfo, &dwInfoSize); 
    if(ret!=ERROR_SUCCESS) 
    {  
        LPVOID lpMsgBuf; 
        DWORD dw = GetLastError();  
         
        FormatMessage( 
            FORMAT_MESSAGE_ALLOCATE_BUFFER |  
            FORMAT_MESSAGE_FROM_SYSTEM, 
            NULL, 
            dw, 
            MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), 
            (LPTSTR) &lpMsgBuf, 
            0, NULL );   
        MessageBox((LPCTSTR)lpMsgBuf, "系统错误", MB_OK|MB_ICONSTOP);  
        LocalFree(lpMsgBuf);     
        RegCloseKey(hKEY); 
        return FALSE; 
    } 
     
    CString csRarAppPath; 
    csRarAppPath.Format("%s",UserInfo); 
    int nCount = csRarAppPath.ReverseFind('\\'); 
    csRarAppPath = csRarAppPath.Mid(0,nCount); 
    // 关闭键 
    RegCloseKey(hKEY);
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值