C++ (MFC) 编写注册表,使开机自启动
注册表的编写
设置一个按钮来调用注册表的函数;
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.何谓REG文件 REG文件实际上是一种注册表脚本文件,双击REG文件即可将其中的数据导入到注册表中.利用REG文件我们可以直接对注册表进行任何修改操作,它对注册表的 ...
- 如何利用注册表修改开机启动程序并提高电脑开机速度!
利用注册表修改开机启动程序: 修改以下三个地方就可以了,最主要的是Run这个地方.[HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersi ...
- 编写注册表文件修改注册表项
编写注册表文件修改注册表项 1.何谓REG文件 REG文件实际上是一种注册表脚本文件,双击REG文件即可将其中的数据导入到注册表中.利用REG文件我们可以直接对注册表进行任何修改操作,它对注册表的操作 ...
- 环境配置 | 更改注册表使PPT导出的图片分辨率达到300dpi
环境配置 | 更改注册表使PPT导出的图片分辨率达到300dpi(转) 转载原文链接: http://www.360doc.com/content/18/0621/17/7669533_7641843 ...
- 修改注册表使任务栏全透明
修改注册表使任务栏全透明 WIN键+R输入命令"regedit"打开注册表 计算机\HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\Cur ...
- 注册表桌面显示计算机,电脑开机后不显示桌面图标怎么办?修改注册表解决开机后不显示桌面图标的3种方法...
解决方法一: 1.按Win+R打开运行,输入regedit并回车: 2.在注册表展开:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersi ...
- Win10为将用户中文名修改为英文名而修改了注册表导致开机时电脑显示“无法登陆到你的账户”的问题简单解决方案
Win10为将用户中文名修改为英文名而修改了注册表导致开机时电脑显示"无法登陆到你的账户"的问题简单解决方案 起因 为了将用户中文名修改为英文名,参考了站内多章大神的方法,结果导致 ...
- vs2008环境下MFC对注册表的读写操作
最近修改一个在vs2008环境下的MFC project,其中用到对注册表的读写操作,虽然在网上down了不少代码也查阅了不少文章,但运行始终存在不少问题,现把我运行成功的代码分享出来,希望对有需要的 ...
- Windows修改注册表实现开机自启动
1.打开注册表 计算机\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run 2.右键添加字符串值 3.添加想要开机自启动运 ...
最新文章
- 字符串全排列的问题 python和c语言实现
- 使用 Azure CLI 管理 Azure 虚拟网络和 Linux 虚拟机
- tensorflow 入门实例(二)
- 【转】ABP源码分析四:Configuration
- access2007连接oracle数据库(通过ODBC)
- 深度学习的推荐模型(DLRMs):设计孪生掩码层高效学习维度自适应的Embedding...
- as常用固定搭配_MongoDB 常用查询操作
- Cisco路由重分发配置(引入路由)
- IceGrid应用 配置手册
- SpringBoot2.4.2+Vue集成Activiti6流程引擎
- 路由器 AP、路由、中继、桥接模式的区别
- 计算机网络什么是p2p,计算机网络-p2p(示例代码)
- 【信息安全】信息安全三要素CIA
- Web Vue VI
- 静态代码分析工具清单:开源篇(各语言)
- 【Aegisub相关】loop修饰语实现对应的源码
- 分区魔法师 (PartitionMagic)
- GDAL打开mdb文件失败解决方法(二)
- 快速排序----科大讯飞2021 java开发岗
- 机电传动控制 PLC梯形图编程练习