加入收藏 | 设为首页 | 会员中心 | 我要投稿 湖南网 (https://www.hunanwang.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 创业 > 正文

c++ 让措施开机自动启动的要领

发布时间:2020-12-29 02:27:19 所属栏目:创业 来源:网络整理
导读:当我们在window下编写本身的措施时,也可以让本身编写的措施在电脑开机时自动运行,这首要是修改windows里的注册表信息,全部开机自动启动的措施的一些信息都放在注册表中的某一文件夹下。我们只需在特定的文件夹下写入我们的措施信息即可。 关于注册表 我们

当我们在window下编写本身的措施时,也可以让本身编写的措施在电脑开机时自动运行,这首要是修改windows里的注册表信息,全部开机自动启动的措施的一些信息都放在注册表中的某一文件夹下。我们只需在特定的文件夹下写入我们的措施信息即可。

关于注册表 我们可以在键盘上同时按下 win+r 键,在运行串口中输regedit 回车即可看到注册表(可以领略为一个大树,记录着体系中的信息),我们点击左边文件夹,点击次序为:SoftwareMicrosoftWindowsCurrentVersionRun,在这个文件夹中存放的即是随机启动的 措施的信息。举个例子:当我们行使某个电脑优化软件举办电脑优化时,他会检测到必要开机优化的项目,即有些软件不须要开机就启动,修改的就是这个文件中的一些信息。

起首我们表明下所用到的函数的寄义:

RegOpenKeyEx()

函数成果描写:打开一个指定的注册表键
原型

LONG RegOpenKeyEx(
HKEY hKey,// 必要打开的主键的名称
LPCTSTR lpSubKey,//必要打开的子键的名称
DWORD ulOptions,// 保存,设为0
REGSAM samDesired,// 安详会见标志,也就是权限
PHKEY phkResult // 获得的将要打开键的句柄
)
Parameters
参数:
hKey
入参,标识当前被 RegCreateKeyEx 或RegOpenKeyEx打开的注册表键的句柄,可能是以下预界说的句柄
HKEY_CLASSES_ROOT
HKEY_CURRENT_USER
HKEY_LOCAL_MACHINE
HKEY_USERS


lpSubKey
入参,该参数指向一个字符串,该字符串用来生涯将要打开的注册表名称。假如这个参数是空,可能是一个指向空串的指针,该函数将会打开一个由hKey所界说的键,在此种环境下,该函数不会封锁舷墙已经打开的句柄。

ulOptions
入参,保存,配置为0

samDesired
入参。标识打开注册表的权利,假如该参数的安详描写符不允许当前历程会见注册表,则该函数会返回失败。此措施中我们行使写入参数即:KEY_WRITE (0x20006)。

phkResult
出参,指向一个变量的指针,该变量用来生涯打开注册表键的句柄。假如不再行使返回的句柄,则挪用RegCloseKey来封锁它。

返回值:
ERROR_SUCCESS暗示该函数执行乐成,非零值暗示该函数执行失败。想要得到错误描写,挪用FormatMessage函数,并传入FORMAT_MESSAGE_FROM_SYSTEM参数。

二:
GetModuleFileName(NULL,pFileName,MAX_PATH);
函数原型获取当前历程已加载模块的文件的完备路径,该模块必需由当前历程加载。)

DWORDGetModuleFileName(
HMODULE hModule,
LPTSTR lpFilename,
DWORD nSize
);
HMODULE hModule: 装载一个措施实例的句柄。假如该参数为NULL,该函数返回应当前应用措施的全路径。
lpFileName: 是你存放返回的名字的内存块的指针,是一个输出参数。
DWORD nSize:装载到缓冲区lpFileName的最大值。

留意:假如想得到某个正在运行的EXE可能DLL的全路径可以这样写代码
GetModuleFileNameEx(hProcess,hInst,lpFile,MAX_PATH);//留意下缓冲区就行了。

三:

RegSetValueEx():想要配置的注册表项下不是默认值,即著名称值的数据和范例时,可以挪用RegSetValueEx函数,该函数将在注册表项下配置指定值的数据和范例。

LONG RegSetValueEx(
HKEY hKey,
LPCTSTR lpValueName,
DWORD Reserved,
DWORD dwType,
CONST BYTE *lpData,
DWORD cbData
);
hKey: 一个已打开项的句柄
lpValueName:指向一个字符串的指针,该字符串包括了欲配置值的名称。若拥有该值名称的值并不存在于指定的注册表项中,则此函数将其插手到该项。
Reserved:保存值,必需逼迫为0
dwType: 指定将被存储的数据范例
lpData: 指向一个缓冲区,该缓冲区包括了欲为指定值名称存储的数据。
cbData:指定由lpData参数所指向的数据的巨细,单元是字节。

以下代码时实现让本措施开机自启的要领.
我们成立个对话框措施,在对话框上放一个button,然后在其动静相应函数中写如下代码:

void CSetAutoRunDlg::OnBnClickedButton1()
{
	// TODO: 在此添加控件关照处理赏罚措施代码
	
	HKEY hKey;  //可以领略为操纵注册表的句柄
  
	//找到体系的启动项  ,长指针范例是const char * 范例
  LPCTSTR lpRun = "SoftwareMicrosoftWindowsCurrentVersionRun";  
  
  //打开启动项Key  
  long lRet = RegOpenKeyEx(HKEY_LOCAL_MACHINE,lpRun,KEY_WRITE,&hKey);  
  
	if(lRet == ERROR_SUCCESS)  //打开乐成
  {  
    char pFileName[MAX_PATH] = {0};  //界说数组存放路径
    //获得措施自身的全路径  
    DWORD dwRet = GetModuleFileName(NULL,MAX_PATH);  
    //添加一个子Key,并配置值 // 下面的"test"是应用措施名字(不加后缀.exe) 
    lRet = RegSetValueEx(hKey,"SetAutoRun",REG_SZ,(BYTE *)pFileName,dwRet);  
    //封锁注册表  
    RegCloseKey(hKey);  
    if(lRet != ERROR_SUCCESS)  
    {  
      MessageBox("体系参数错误,不能完成开机启动配置");  
    }  
    else 
    { 
      MessageBox("打开开机启动乐成");  
    } 
    // isrun = 1; 
  }  
}

点击运行后,呈现"启动乐成"对话框,重启电脑后,软件开机启动(当运行措施时,有的杀毒软件也许会发出注册表修改的告诫,那正是我们的措施在修改注册表)

(编辑:湖南网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读