C++ (MFC) 编写注册表,使开机自启动
来源:互联网 发布:普吉岛海滩哪个好 知乎 编辑:程序博客网 时间:2024/06/05 06:07
注册表的编写
设置一个按钮来调用注册表的函数;
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) 编写注册表,使开机自启动
- MFC开机自启动(写注册表)
- 注册表操作、开机自启动
- MFC开机启动写注册表
- MFC开机自启动
- MFC 开机自启动
- 【c#】开机自启动
- MFC 设置开机自启动
- MFC应用程序开机自启动
- MFC设置开机自启动
- 修改注册表开机自启动程序
- 修改注册表开机自启动(vc)
- 修改注册表 实现开机程序自启动
- 修改注册表实现程序开机自启动
- 开机启动运行的注册表操作(MFC)
- C语言实现应用程序开机自启动(写进注册表)
- ubuntu编写开机自启动shell脚本
- Android开机自启动服务的编写
- 文件上传插件WebUploader的使用
- 1.Mac常用快捷键命令(不定更新)
- 一眼看懂https的工作流程
- 项目总结(4)关于label标签和input标签在angular.js中的用法
- butterknife配置以及使用
- C++ (MFC) 编写注册表,使开机自启动
- windows socket 简单实现
- 史上最简单的 SpringCloud 教程 | 终章
- date类型,怎么转换为timestamp类型?
- Java中this关键字的用法
- WPA-PSK无线网络破解原理及过程
- Neo4j 第一篇:在Windows环境中安装Neo4j
- [面试]常用linux命令
- restful:put操作资源可能存在的安全问题