C++编程读取注册表文件

C++通过访问注册表获取已安装软件信息列表

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

下边是通过读取注册表获取360安装路径的过程

regopenkeyex

https://docs.microsoft.com/en-us/windows/desktop/api/winreg/nf-winreg-regopenkeyexa

打开指定的注册表项。请注意,键名称不区分大小写。

如果函数成功,则返回值为ERROR_SUCCESS。

RegQueryValueEx

检索与打开的注册表项关联的指定值名称的类型和数据。

如果函数成功,则返回值为ERROR_SUCCESS。

完整代码

LPCTSTR lpSubKey;//查询时的子键
HKEY RootKey;//查询时的主键
HKEY hkResult;//查询注册表的结果
LONG lRet;
DWORD index = 0;
DWORD dwKeyLen = 255;
DWORD dwType = REG_BINARY | REG_DWORD | REG_EXPAND_SZ | REG_MULTI_SZ | REG_NONE | REG_SZ;
TCHAR szBuffer[255] = { 0 };
DWORD dwNameLen = 255;RootKey = HKEY_USERS;
CString sid;
getSID(sid);
sid+= _T("\\Software\\Microsoft\\Windows\\CurrentVersion\\Uninstall\\360se6");
cout << "lpSubKey : " << sid << endl;
lpSubKey = sid;
cout << "lpSubKey : " << lpSubKey << endl;
//下面是打开注册表, 只有打开后才能做其他操作
//主键和子键共同组成了注册表中的目录
lRet = RegOpenKeyEx(RootKey, lpSubKey, 0, KEY_ALL_ACCESS, &hkResult);
cout << "lRet : " << lRet << endl;
if (lRet == ERROR_SUCCESS)   // 判断是否打开成功
{cout << "retOpen : " << lRet << endl;LONG retOpen = RegQueryValueEx(hkResult, _T("InstallLocation"), 0, &dwType, (LPBYTE)szBuffer, &dwNameLen);//通过上边的注册表截图可以看到,通过"InstallLocation"可以找到对应的路径信息cout << "retOpen : " << retOpen << endl;cout << "szBuffer : " << szBuffer << endl;RegCloseKey(hkResult);
}

其中的SID()是为了获取用户的SID,实现如下

void getSID(CString &sid)
{char userName[MAX_NAME] = "";char sid1[MAX_NAME] = "";char sid2[MAX_NAME] = "";char sid3[MAX_NAME] = "";char sid4[MAX_NAME] = "";char sid5[MAX_NAME] = "";char sid6[MAX_NAME] = "";DWORD nameSize = sizeof(userName);GetUserName((LPSTR)userName, &nameSize);char userSID[MAX_NAME] = "";char userDomain[MAX_NAME] = "";DWORD sidSize = sizeof(userSID);DWORD domainSize = sizeof(userDomain);SID_NAME_USE snu;LookupAccountName(NULL,(LPCSTR)userName,(PSID)userSID,&sidSize,(LPSTR)userDomain,&domainSize,&snu);PSID_IDENTIFIER_AUTHORITY psia = GetSidIdentifierAuthority(userSID);sidSize = sprintf_s(sid1, "S-%lu-", SID_REVISION);sidSize += sprintf_s(sid2, "%-lu", psia->Value[5]);sid += sid1;sid += sid2;int i = 0;int subAuthorities = *GetSidSubAuthorityCount(userSID);for (i = 0; i < subAuthorities; i++){char sid7[MAX_NAME] = "";sidSize += sprintf_s(sid7, "-%lu", *GetSidSubAuthority(userSID, i));sid += sid7;}cout << sid << endl;
}

C++编程读取注册表文件相关推荐

  1. vbs脚本功能:1、判断系统位数64/32;2、读取注册表,读取应用名称。3、读取txt文件;4、执行exe文件,安装程序。

    vbs脚本功能:1.判断系统位数:2.读取注册表,读取应用名称.displayName就是程序与功能里面展示的应用名称.3.读取txt文件:4.执行exe文件,安装程序. 注意:1.文本编码方式要用A ...

  2. qsettings删除注册表_Qt QSettings读取注册表和ini | 学步园

    1.读取注册表,以读取已经安装的软件为例. 已经安装的软件信息的注册表位置: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\ ...

  3. php 读取注册表 不用wscript.shell,WebShell的检测技术_91Ri.org

    一.Webshell 的常见植入方法 -启明星辰  Leylo Trent WebShell 攻击是常见的用来控制Web 服务器的攻击方法,WebShell 文件通常是可执行的脚本文件,例如asp, ...

  4. 求助:Windows Service 读取注册表键值

    最近项目需要程序监控记录用户使用和打开的文件,于是做了一个使用Windows Service监控Recent文件夹中文件增加和更改的程序, 但是需要在服务程序确定Recent文件夹的路径,使用Regi ...

  5. JavaScript读取注册表

    代码: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3. ...

  6. 0xc000000f 由于系统注册表文件丢失或损坏,因此Windows无法加载

    WIN7出现以下情况,是thinkpad x61笔记本.Windows未能启动.原因可能是最近更改了硬件或软件,解决此问题的步骤: 1:插入Windows安装光盘并从新启动计算机. 2:选择语言设置, ...

  7. 自动打开WINDWOS远程控制的注册表文件

    自动打开WINDWOS远程控制和关闭自动更新的注册表文件 转载于:https://blog.51cto.com/450911/94942

  8. c 语言读取注册表信息,C++读取注册表的实现方法

    C++读取注册表 GetRegValue.h: #ifndef __GETREGVALUE_H__ #define __GETREGVALUE_H__ #include //------------- ...

  9. 命令编写注册表文件修改注册表项

    命令编写注册表文件修改注册表项 1.何谓REG文件 REG文件实际上是一种注册表脚本文件,双击REG文件即可将其中的数据导入到注册表中.利用REG文件我们可以直接对注册表进行任何修改操作,它对注册表的 ...

  10. android 遍历sdcard,Android编程读取Assets所有文件(遍历每一个文件夹)并存入sdcard的方法...

    本文实例讲述了Android编程读取Assets所有文件(遍历每一个文件夹)并存入sdcard的方法.分享给大家供大家参考,具体如下: private void CopyAssets(String a ...

最新文章

  1. FL计算机软件,FL Studio12水果音乐制作软件
  2. FZU 1901 Period II(KMP中的next)题解
  3. Linux下制作动图的软件,Linux 下制作Gif动画
  4. 【数据库系统概论】考研重点章节分析【0】
  5. PHP PDO 预处理语句与存储过程
  6. jQuery利用JSONP解决AJAX跨域请求
  7. python的异常处理
  8. 光耦驱动单向可控硅_华越国际一文带路:可控硅触发设计技巧
  9. 第二章 二进制数值和记数系统
  10. java jqgrid treegrid_JqGrid中文文档之TreeGrid
  11. ResourceUtils读取properties文件
  12. 并发编程---填充缓存行消除伪共享
  13. 【代码优化】构造器参数繁多时候,考虑使用builder模式
  14. 前端 利用html实现分页切换效果
  15. 3DMax如何安装?3DMax2018软件安装图文教程全解
  16. java课设心得体会2000字_java课程设计报告心得体会
  17. HTML+CSS静态页面网页设计作业——甜品奶茶店(19页) HTML5网页设计成品_学生DW静态网页设计_web课程设计网页制作
  18. Cadence之ORCAD:导出Bom清单
  19. yocto项目下载与编译
  20. Linux创建用户和删除用户

热门文章

  1. 科创板已开板 区块链离科创板还远吗?
  2. windows 8.1安装VS2005出现安装失败:未能安装.NET framework 3.5解决方案
  3. 目前计算机硬件安全,计算机硬件与网络安全
  4. mp3文件怎么压缩大小
  5. oninput和onpropertychange以及其兼容处理
  6. chorme浏览器广告终结者视频白频解决办法
  7. 仿淘宝网站基于html网页模板设计静态网页模板参考.rar(项目源码)
  8. android 发布最新系统更新包,安卓升级包(安卓补丁包更新)
  9. Python笔记(21)正则表达式
  10. SpringBoot读取自定义配置文件