注册表的编写

设置一个按钮来调用注册表的函数;

void CMFCtest1Dlg::OnBnClickedButton5()
{// TODO: 在此添加控件通知处理程序代码Autostart();//注册表函数;}

这里编写注册表自启动函数

BOOL CMFCtest1Dlg::Autostart()
{TCHAR pathstr[MAX_PATH] = { 0 };//max_path代表最大目录值,等于260;GetModuleFileName(NULL, pathstr, MAX_PATH);//获取进程的目录,当第一个参数为null时,使用当前进程目录;HKEY hsoftkey;RegOpenKey(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), &hsoftkey);/*返回值Long,零(ERROR_SUCCESS)表示成功。其他任何值都代表一个错误代码参数表参数 类型及说明hKey Long,一个已打开项的句柄,或指定一个标准项名lpSubKey String,要打开的项名phkResult Long,指定一个变量,用于装载(保存)打开注册表项的一个句柄*/int len = _tcslen(pathstr);RegSetKeyValue(hsoftkey, 0, _T("autostart"), REG_SZ, pathstr, len);BYTE content[MAX_PATH] = { 0 };DWORD ret = 0;DWORD dwType = REG_SZ;DWORD type2 = 0;DWORD size;//需要调用两遍,第一次调用获取储存值,第二次赋值,如果只调用一次会出现容量不足的error;ret = RegGetValue(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), _T("autostart"), RRF_RT_REG_SZ, &type2, NULL, &size);ret = RegGetValue(HKEY_CURRENT_USER, _T("Software\\Microsoft\\Windows\\CurrentVersion\\Run"), _T("autostart"), RRF_RT_REG_SZ, &type2, content, &size);RegCloseKey(hsoftkey);return 0;
}

如果文档写好后运行时出现杀毒软件提醒(如下图),选择允许本次操作,毕竟注册表是敏感的东西,杀毒软件都会提醒

其中有些函数方法不太懂,查了一下官方的文档

LONG WINAPI RegGetValue(
In HKEY hkey,
In_opt LPCTSTR lpSubKey,
In_opt LPCTSTR lpValue,
In_opt DWORD dwFlags,
Out_opt LPDWORD pdwType,
Out_opt PVOID pvData,
Inout_opt LPDWORD pcbData
);

  • hkey [in]
    一个打开注册表项的句柄

  • lpSubKey [in,可选]
    注册表项的名称。也就是注册表文件当前所在目录

  • lpValue [in,可选]
    注册表值的名称。
    如果此参数为NULL或空字符串“”,则该函数将检索该密钥的未命名或默认值(如果有)的类型和数据

  • dwFlags [in,可选]
    限制要查询的值的数据类型的标志。如果该值的数据类型不符合该标准,则该功能失败。该参数可以是以下一个或多个值。
    值和含义
    RRF_RT_ANY
    0x0000ffff
    没有类型限制。
    RRF_RT_DWORD
    0x00000018
    将类型限制为32位RRF_RT_REG_BINARY | RRF_RT_REG_DWORD。
    RRF_RT_QWORD
    0x00000048
    将类型限制为64位RRF_RT_REG_BINARY | RRF_RT_REG_DWORD。
    RRF_RT_REG_BINARY
    0x00000008
    将类型限制为REG_BINARY。
    RRF_RT_REG_DWORD
    0x00000010
    将类型限制为REG_DWORD。
    RRF_RT_REG_EXPAND_SZ
    0x00000004
    将类型限制为REG_EXPAND_SZ。
    RRF_RT_REG_MULTI_SZ
    0x00000020
    将类型限制为REG_MULTI_SZ。
    RRF_RT_REG_NONE
    00000001
    将类型限制为REG_NONE。
    RRF_RT_REG_QWORD
    0x00000040
    将类型限制为REG_QWORD。
    RRF_RT_REG_SZ
    0x00000002
    将类型限制为REG_SZ。
    RRF_NOEXPAND
    0x10000000处
    如果值是REG_EXPAND_SZ类型,则不要自动展开环境字符串。
    RRF_ZEROONFAILURE
    0x20000000
    如果pvData不是NULL,则在失败时将缓冲区的内容设置为零。
    RRF_SUBKEY_WOW6464KEY
    0x00010000在
    如果lpSubKey不为NULL,请使用KEY_WOW64_64KEY访问权限打开lpSubKey指定的子项 。有关这些访问权限的信息,请参阅注册表项安全和访问权限。
    您无法将RRF_SUBKEY_WOW6464KEY与RRF_SUBKEY_WOW6432KEY结合使用 。
    RRF_SUBKEY_WOW6432KEY
    0x00020000
    如果lpSubKey不为NULL,请使用KEY_WOW64_32KEY访问权限打开lpSubKey指定的子项 。有关这些访问权限的信息,请参阅注册表项安全和访问权限。
    您不能将RRF_SUBKEY_WOW6432KEY与RRF_SUBKEY_WOW6464KEY一起 指定。

  • pdwType [out,可选]
    指向一个变量的指针,该变量接收指示存储在指定值中的数据类型的代码。有关可能的类型代码的列表,请参阅 注册表值类型。如果类型不是必需的,这个参数可以是NULL。

  • pvData [out,可选]
    指向接收值的数据的缓冲区的指针。如果数据不是必需的,这个参数可以是NULL。
    如果数据是字符串,则函数检查终止的空字符。如果没有找到,如果缓冲区足够大,以容纳额外的字符,字符串存储与空终止符。否则,该函数将失败并返回ERROR_MORE_DATA。

  • pcbData [输入,输出,可选]
    指向变量的指针,指定由pvData参数指向的缓冲区的大小(以字节为单位)。当函数返回时,这个变量包含复制到pvData的数据的大小。

ps:参考官方文档地址
https://msdn.microsoft.com/en-us/library/windows/desktop/ms724868(v=vs.85).aspx

LONG WINAPI RegSetKeyValue(
In HKEY hKey,
In_opt LPCTSTR lpSubKey,
In_opt LPCTSTR lpValueName,
In DWORD dwType,
In_opt LPCVOID lpData,
In DWORD cbData
);
参数

  • hKey [输入]
    一个打开注册表项的句柄。密钥必须已经用KEY_SET_VALUE访问权限打开。

  • lpSubKey [in,可选]
    密钥的名称和由hKey标识的密钥的子密钥。如果此参数为NULL,则使用hKey值在该密钥中创建此值,并且该密钥获取默认的安全描述符。

  • lpValueName [in,可选]
    数据将被更新的注册表值的名称。

  • dwType [in]
    由lpData参数指向的数据的类型。有关可能的类型的列表,请参阅 注册表值类型。

  • lpData [in,可选]
    要用指定的值名称存储的数据。
    对于基于字符串的类型(如REG_SZ),该字符串必须以空字符结尾。使用REG_MULTI_SZ数据类型时,字符串必须以两个空字符结尾。

  • cbData [in]
    lpData参数指向的信息的大小,以字节为单位。如果数据类型为REG_SZ,REG_EXPAND_SZ或REG_MULTI_SZ,则cbData必须包含终止空字符的大小。

ps:参考官方文档地址
https://msdn.microsoft.com/en-us/library/ms724921(VS.85).aspx

C++ (MFC) 编写注册表,使开机自启动相关推荐

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

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

  2. 如何利用注册表修改开机启动程序并提高电脑开机速度!

    利用注册表修改开机启动程序: 修改以下三个地方就可以了,最主要的是Run这个地方.[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersi ...

  3. 编写注册表文件修改注册表项

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

  4. 环境配置 | 更改注册表使PPT导出的图片分辨率达到300dpi

    环境配置 | 更改注册表使PPT导出的图片分辨率达到300dpi(转) 转载原文链接: http://www.360doc.com/content/18/0621/17/7669533_7641843 ...

  5. 修改注册表使任务栏全透明

    修改注册表使任务栏全透明 WIN键+R输入命令"regedit"打开注册表 计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Cur ...

  6. 注册表桌面显示计算机,电脑开机后不显示桌面图标怎么办?修改注册表解决开机后不显示桌面图标的3种方法...

    解决方法一: 1.按Win+R打开运行,输入regedit并回车: 2.在注册表展开:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersi ...

  7. Win10为将用户中文名修改为英文名而修改了注册表导致开机时电脑显示“无法登陆到你的账户”的问题简单解决方案

    Win10为将用户中文名修改为英文名而修改了注册表导致开机时电脑显示"无法登陆到你的账户"的问题简单解决方案 起因 为了将用户中文名修改为英文名,参考了站内多章大神的方法,结果导致 ...

  8. vs2008环境下MFC对注册表的读写操作

    最近修改一个在vs2008环境下的MFC project,其中用到对注册表的读写操作,虽然在网上down了不少代码也查阅了不少文章,但运行始终存在不少问题,现把我运行成功的代码分享出来,希望对有需要的 ...

  9. Windows修改注册表实现开机自启动

    1.打开注册表 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 2.右键添加字符串值 3.添加想要开机自启动运 ...

最新文章

  1. 字符串全排列的问题 python和c语言实现
  2. 使用 Azure CLI 管理 Azure 虚拟网络和 Linux 虚拟机
  3. tensorflow 入门实例(二)
  4. 【转】ABP源码分析四:Configuration
  5. access2007连接oracle数据库(通过ODBC)
  6. 深度学习的推荐模型(DLRMs):设计孪生掩码层高效学习维度自适应的Embedding...
  7. as常用固定搭配_MongoDB 常用查询操作
  8. Cisco路由重分发配置(引入路由)
  9. IceGrid应用 配置手册
  10. SpringBoot2.4.2+Vue集成Activiti6流程引擎
  11. 路由器 AP、路由、中继、桥接模式的区别
  12. 计算机网络什么是p2p,计算机网络-p2p(示例代码)
  13. 【信息安全】信息安全三要素CIA
  14. Web Vue VI
  15. 静态代码分析工具清单:开源篇(各语言)
  16. 【Aegisub相关】loop修饰语实现对应的源码
  17. 分区魔法师 (PartitionMagic)
  18. GDAL打开mdb文件失败解决方法(二)
  19. 快速排序----科大讯飞2021 java开发岗
  20. 机电传动控制 PLC梯形图编程练习

热门文章

  1. 前端入门: 前端开发主要有哪些层? 语言和功能分别是什么
  2. 复旦大学陈果老师的经典语录--大家有必要看下
  3. 网络编程中的 SIGPIPE 信号
  4. 小数十进制转十六进制
  5. ubuntu系统配置固定ip
  6. 热销手机排行榜显示,高端手机市场依然是三星和苹果的天下
  7. 可能是最详尽的证券服务治理框架思路 | 华泰证券企业服务化思考 | 中生代38期...
  8. Python爬虫实战+数据分析+数据可视化(NBA_腾讯体育)
  9. oracle外键约束的总结
  10. 补码运算是否溢出的规则的实现