c++ 写注册表方式让程序开机自启动

 更新时间:2017年09月14日 23:24:02   投稿:mdxy-dxy  
这篇文章主要介绍了c++ 写注册表方式让程序开机自启动,需要的朋友可以参考下

打开注册表:win+R, 输入regedit 点击确定

你会看到五个根目录,开机自启动的信息写在 HKEY_LOCAL_MACHINE 下面,具体的目录为 SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run
要怎么将开机自启动的信息写入注册表中呢?其实过程很简单,第一步,打开注册表,第二步,写注册表,第三步,关闭键的句柄

打开注册表要使用RegOpenKeyEx 函数

    
LONGRegOpenKeyEx(
  HKEYhKey, // 需要打开的主键的名称
  LPCTSTRlpSubKey, // 需要打开的子键的名称
  DWORDulOptions, // 保留,设为0
  REGSAM samDesired, // 安全访问标记,也就是权限
  PHKEYphkResult // 得到的将要打开键的句柄
)

第一个参数,我们要传入
HKEY_LOCAL_MACHINE

第二个参数,我们要传入
SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run

第三个参数,我们要传入
0

第四个参数,稍微有点调皮,很多实例都传入KEY_ALL_ACCESS,但是在64位操作系统下,最好传入KEY_ALL_ACCESS|KEY_WOW64_64KEY,不然写完注册表后,不会显示写入的注册信息

第五个参数,传入一个HKEY的引用即可

写注册表使用RegSetValueEx
函数

LONG RegSetValueEx(
  HKEY hKey,// RegOpenKeyEx函数中传入的最后一个参数,也就是打开的键的句柄
  LPCTSTR lpValueName, // 键的名称
  DWORD Reserved, // 传入NULL
  DWORD dwType, // 传入REG_SZ
  CONST BYTE *lpData, // 要启动的程序的完整地址
  DWORD cbData// lpData的大小
);

贴上代码,win8 系统下 vs2012

void test()
{
	
	LPCTSTR lpSubKey = L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run"; 
	
	HKEY hKey;
	REGSAM flag = KEY_WOW64_64KEY; 
	DWORD dwDisposition = REG_OPENED_EXISTING_KEY; 
	LONG lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE, L"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run", 0, KEY_ALL_ACCESS|flag,&hKey);
	//LONG lRet = ::RegCreateKeyEx(HKEY_LOCAL_MACHINE, lpSubKey, NULL, NULL, REG_OPTION_NON_VOLATILE,KEY_ALL_ACCESS, NULL, &hKey, &dwDisposition); 
	if ( ERROR_SUCCESS != lRet) 
  { 
    return; 
  } 
	
	TCHAR *pchrName = L"D:\\Program Files (x86)\\Tencent\\QQ\\Bin\\QQ.exe";
	lRet = ::RegSetValueEx(hKey, TEXT("TEST"), NULL, REG_SZ, (LPBYTE)pchrName, wcslen(pchrName)*sizeof(TCHAR)+1); //设置注册表项 
  if ( ERROR_SUCCESS != lRet) 
  { 
    return; 
  } 
 
  ::RegCloseKey(hKey); //与RegCreateKeyEx配对写 
	
};

还有一点要说明,在win8系统下,需要获得管理员权限才能正确运行上述代码,否则,无法打开注册表

具体方法如下:

VS2012,在项目属性-配置属性-链接器-清单文件-UAC执行级别

中设为 requireAdministrator (/level='requireAdministrator')

以管理员身份重新运行VS2012

相关文章

  • 深入解析int(*p)[]和int(**p)[]

    深入解析int(*p)[]和int(**p)[]

    以下是对int(*p)[]和int(**p)[]的使用进行了详细的分析介绍,需要的朋友可以参考下
    2013-07-07
  • 详解C++中的常量

    详解C++中的常量

    这篇文章主要介绍了C++中的常量的相关资料,文中示例代码非常详细,帮助大家更好的理解和学习,感兴趣的朋友可以了解下
    2020-07-07
  • 关于C++中void*的小作用浅析

    关于C++中void*的小作用浅析

    这篇文章主要给大家介绍了关于C++中void*的一些小作用,文中通过示例代码介绍的非常详细,对大家学习或者使用C++具有一定的参考学习价值,需要的朋友可以参考借鉴,下面随着小编来一起学习学习吧。
    2017-08-08
  • 创建二叉树 二叉树如何删除节点操作教程

    创建二叉树 二叉树如何删除节点操作教程

    本文将详细介绍二叉树的创建,节点删除,节点增加等一系列操作方法,需要的朋友可以参考下
    2012-12-12
  • C++ Boost Utility超详细讲解

    C++ Boost Utility超详细讲解

    Boost是为C++语言标准库提供扩展的一些C++程序库的总称。Boost库是一个可移植、提供源代码的C++库,作为标准库的后备,是C++标准化进程的开发引擎之一,是为C++语言标准库提供扩展的一些C++程序库的总称
    2022-12-12
  • C++数据结构之list详解

    C++数据结构之list详解

    list是一种序列式容器。list容器完成的功能实际上和数据结构中的双向链表是极其相似的,list中的数据元素是通过链表指针串连成逻辑意义上的线性表,也就是list也具有链表的主要优点,即:在链表的任一位置进行元素的插入、删除操作都是快速的
    2021-11-11
  • C++学习之cstdbool和cstddef头文件封装源码分析

    C++学习之cstdbool和cstddef头文件封装源码分析

    这篇文章主要为大家介绍了C++学习之cstdbool和cstddef头文件封装源码分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-09-09
  • C++根据传入的函数指针来解析需要的参数(推荐)

    C++根据传入的函数指针来解析需要的参数(推荐)

    C++可以根据传入的函数指针,获取自己需要的参数类型,然后根据参数源中获取需要的参数,具体实现方式大家参考下本文
    2018-05-05
  • VC++创建msi文件的方法

    VC++创建msi文件的方法

    这篇文章主要介绍了VC++创建msi文件的方法,对于应用程序的开发有一定的借鉴价值,需要的朋友可以参考下
    2014-07-07
  • 一篇文章带你了解C语言文件操作中的几个函数

    一篇文章带你了解C语言文件操作中的几个函数

    这篇文章主要介绍了使用C语言操作文件的基本函数整理,包括创建和打开以及关闭文件的操作方法,需要的朋友可以参考下,希望能够给你带来帮助
    2021-09-09

最新评论