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

(0)

相关推荐

  • C++写注册表项实例

    本文实例讲述了C++写注册表实现开机启动的方法.分享给大家供大家参考. 具体实现方法如下: 复制代码 代码如下: void SelfRun(LPSTR lpszValueName) //lpszValueName 显示的名称  {      LPCTSTR lpSubKey = "Software\\Microsoft\\Windows\\CurrentVersion\\Run";      HKEY hKey;      DWORD dwDisposition = REG_OPENE

  • C++读取注册表的实现方法

    C++读取注册表 GetRegValue.h: #ifndef __GETREGVALUE_H__ #define __GETREGVALUE_H__ #include <string> //--------------------------------------------------------------- //function: // GetRegValue 获取注册表中指定键的值 //Access: // public //Parameter: // [in] int nKeyT

  • VC++实现文件与应用程序关联的方法(注册表修改)

    本文实例讲述了VC++实现文件与应用程序关联的方法.分享给大家供大家参考,具体如下: 日常工作中,doc文件直接双击后,就能启动word软件,并读取该文档的内容在软件中显示,这都得益于注册表的配置,我们的软件也需要实现这样的功能,该如何写注册表以及写入哪些内容呢?下面的两个函数就能实现这个功能.CheckFileRelation是检查注册表中是否已经将我们期待的文件格式与相应软件关联了:RegisterFileRelation是直接往注册表中写入相关的key和value. /**********

  • C++访问注册表获取已安装软件信息列表示例代码

    复制代码 代码如下: // ---------------------------------------------------------------// FlieNmae: //   SofInfo.h// Remark://   通过读取注册表获得本机已安装软件信息.// ---------------------------------------------------------------#pragma once#include <vector> struct SoftInfo

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

    打开注册表:win+R, 输入regedit 点击确定 你会看到五个根目录,开机自启动的信息写在 HKEY_LOCAL_MACHINE 下面,具体的目录为 SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run 要怎么将开机自启动的信息写入注册表中呢?其实过程很简单,第一步,打开注册表,第二步,写注册表,第三步,关闭键的句柄 打开注册表要使用RegOpenKeyEx 函数 LONGRegOpenKeyEx( HKEYhKey, // 需要打开的主键的名

  • 利用注册表限制特定程序运行—注册表使用全攻略之十四

    利用注册表限制特定程序运行-注册表使用全攻略之十四 对于一些与系统密切相关的程序,如果随意让其他人使用,非常容易造成死机甚至系统崩溃.通过系统本身的注册表来限制特定程序的运行. 1.一键锁通关 我们要做的是在注册表中加入"RestrictRun"键值,以此来限制绝大多数程序的运行 . 运行"Regedit"打开注册表编辑器,展开HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\E

  • 将python2.7添加进64位系统的注册表方式

    解决问题:python2.7无法在注册表中被识别,即在安装NumPy和SciPy等出现"python version 2.7 required, which was not found in register"的问题. 解决方法:新建一个"register.py"的文件,复制以下内容,通过powershell的命令"python register.py"运行,看到"Python 2.7 is now registered!"即

  • Android编程实现应用程序开机自启动的方法

    本文实例讲述了Android编程实现应用程序开机自启动的方法.分享给大家供大家参考,具体如下: Android在开机时自动启动一个应用程序 在启动时自动启动一个应用程序: 1.AndroidManifest.xml <receiver android:enabled="true" android:name=".BootUpReceiver" android:permission="android.permission.RECEIVE_BOOT_COM

  • Vbscript写注册表的方法

    分类:程序 早些年用过DOS系统的用户都知道,MS-DOS操作系统允许普通用户编写批处理文件来实现简单的编程.它有效地简化了我们的工作,带给我们许多方便.当时甚至出现了一些专门编写批处理文件的程序员呢. 事实上,操作系统除了提供易于操作的使用界面外,还应当有一套内建的Script(脚本)语言才算完整.从某种角度来说,批处理文件可以说就是MS-DOS下的脚本语言.到了Windows时代,虽然Windows系统仍然保留了批处理,但是批处理在Windows中就显得功能过于简单,无法满足用户的需要了--

  • 用注册表给应用程序加口令

    几乎每个应用系统都有相应的权限管理功能.对于大型多用户应用系统,一般是将权限设置保存在数据库中.但是对于小型的单用户应用系统和非数据库应用系统,就没有必要将权限设置保存在数据库中,但是用文件来保存既不方便又不安全,因为文件很可能被删除或毁坏.其实,灵活地利用Windows注册表的特点,可以很方便地为应用系统设置用户名和口令,这种方法不但编程简便,而且安全性比较高.下面举例说明,该例程在Windows98,Delphi4环境下调试通过. 设计流程为:先判断是否为第一次使用,如果为第一次使用,则要求

  • C语言实现程序开机自启动

    程序比较简单,用到了C语言获得自身路径和系统路径,修改注册表项等,某些函数不理解可以查看MSDN #include<stdio.h> #include<windows.h> char *GetFilename(char *p) //得到一个路径的纯文件名 { int x=strlen(p); char ch='\\'; char *q=strrchr(p,ch); return q; } int main() { char *filepath; char modlepath[256

  • 详解CentOS设置程序开机自启动的方法

    在CentOS系统下,主要有两种方法设置自己安装的程序开机启动. 1.把启动程序的命令添加到/etc/rc.d/rc.local文件中,比如下面的是设置开机启动httpd. #!/bin/sh # # This script will be executed *after* all the other init scripts. # You can put your own initialization stuff in here if you don't # want to do the fu

  • 写给电脑初学者的一些建议(注册表篇)

    有人曾经说过,了解了注册表就读懂了WIN系统,这句话是一点都不假的.那么,什么是注册表?注册表有什么功能?如何去修改注册表以达到最佳的效果?又如何来区分注册表里有用和无用甚至是危害的部分呢? 什么是注册表?在还是使用Dos和Win3.x操作系统的时代里,大部分的应用程序都采用了ini文件(初始化文件)来保存一些配置信息,如设置路径,环境变量等.system.ini和win.ini控制着所有windows和应用程序的特征和存取方法,它在少数的用户和少数应用程序的环境中工作的很好.随着应用程序的数目

随机推荐