VC常用代码之通过注册表寻找应用程序路径

原文地址:http://blog.csdn.net/clever101/article/details/3115945

很多时候在调用一些应用程序之前需要先找到应用程序的路径。使用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); 


你可能感兴趣的:(VC常用代码之通过注册表寻找应用程序路径)