`
happmaoo
  • 浏览: 4324110 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

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

阅读更多

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

<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

  1. //打开键
  2. HKEYhKEY;
  3. LPCTSTRRgspath="WinRAR\\shell\\open\\command";
  4. LONGret=RegOpenKeyEx(HKEY_CLASSES_ROOT,Rgspath,0,KEY_READ,&hKEY);
  5. if(ret!=ERROR_SUCCESS)
  6. {
  7. RegCloseKey(hKEY);
  8. returnFALSE;
  9. }
  10. //读取键值内容
  11. DWORDdwInfoSize;
  12. DWORDtype=REG_SZ;
  13. BYTEUserInfo[255];
  14. //zjc08.04.24addedbegin
  15. /*
  16. 注意RegQueryValueEx最后一个参数是个双向参数,入参时表示的是前一个参数的缓冲区大小,出参时表示的是返回的大小。
  17. 所以最好把UserInfo的大小给dwInfoSize,防止UserInfo溢出。
  18. */
  19. dwInfoSize=sizeof(UserInfo)/sizeof(BYTE);
  20. ret=RegQueryValueEx(hKEY,NULL,NULL,&type,UserInfo,&dwInfoSize);
  21. if(ret!=ERROR_SUCCESS)
  22. {
  23. LPVOIDlpMsgBuf;
  24. DWORDdw=GetLastError();
  25. FormatMessage(
  26. FORMAT_MESSAGE_ALLOCATE_BUFFER|
  27. FORMAT_MESSAGE_FROM_SYSTEM,
  28. NULL,
  29. dw,
  30. MAKELANGID(LANG_NEUTRAL,SUBLANG_DEFAULT),
  31. (LPTSTR)&lpMsgBuf,
  32. 0,NULL);
  33. MessageBox((LPCTSTR)lpMsgBuf,"系统错误",MB_OK|MB_ICONSTOP);
  34. LocalFree(lpMsgBuf);
  35. RegCloseKey(hKEY);
  36. returnFALSE;
  37. }
  38. CStringcsRarAppPath;
  39. csRarAppPath.Format("%s",UserInfo);
  40. intnCount=csRarAppPath.ReverseFind('\\');
  41. csRarAppPath=csRarAppPath.Mid(0,nCount);
  42. //关闭键
  43. RegCloseKey(hKEY);
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics