创造一个C++程序,并让其把编译后的exe文件复制到开机启动项里

原理:
windows 开机会检索注册表,其中有一项

HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

是微软 定义的开机程序检索表
利用windows api 函数修改该注册表即可实现开机启动程序

我们手动实现一下:
1、点击开始——运行,输入regedit打开注册表
2、找到HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run打开后,
点右键 新建-字符串值,输入任意名称,然后右击该名称-修改,
在“数值数据”栏输入你要自动启动的应用程序文件所在的完整路径的文件名

活不多说,开码
需要以下头文件

#include 
#include 

直接上函数

void HKRunator(char *programName)   //程序名称(**全路径**)
{
	HKEY hkey = NULL;
	DWORD rc;

	rc = RegCreateKeyEx(HKEY_LOCAL_MACHINE,                      //创建一个注册表项,如果有则打开该注册表项
		"SOFTWARE\\Microsoft\\Windows\\CurrentVersion\\Run",
		0,
		NULL,
		REG_OPTION_NON_VOLATILE,
		KEY_WOW64_64KEY | KEY_ALL_ACCESS,    //部分windows系统编译该行会报错, 删掉 “”KEY_WOW64_64KEY | “” 即可
		NULL,
		&hkey,
		NULL);

	if (rc == ERROR_SUCCESS)   
	{
		rc = RegSetValueEx(hkey, 
			"UStealer",
			0,
			REG_SZ,
			(const BYTE *)programName,
			strlen(programName));
		if (rc == ERROR_SUCCESS)
		{
			RegCloseKey(hkey);
		}
	}
}

如需调用该函数,传入程序全路径名即可。

科普一下

一、当前用户专有的启动文件夹

 这是许多应用软件自动启动的常用位置,Windows自动启动放入该文件夹的所有快捷方式。用户启动文件夹一般在:\Documents and Settings\<用户名字>\「开始」菜单\程序\启动,其中“<用户名字>”是当前登录的用户帐户名称。

二、对所有用户有效的启动文件夹

 这是寻找自动启动程序的第二个重要位置,不管用户用什么身份登录系统,放入该文件夹的快捷方式总是自动启动——这是它与用户专有的启动文件夹的区别所在。该文件夹一般在:\Documents and Settings\All Users\「开始」菜单\程序\启动。

三、Load注册键

 介绍该注册键的资料不多,实际上它也能够自动启动程序。位置:HKEY_CURRENT_USER\Software\Microsoft\WindowsNT\CurrentVersion\Windows\load。

四、Userinit注册键

 位置:HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\WindowsNT\CurrentVersion\Winlogon\Userinit。这里也能够使系统启动时自动初始化程序。通常该注册键下面有一个userinit.exe,如图,但这个键允许指定用逗号分隔的多个程序,例如“userinit.exe,OSA.exe”(不含引号)。

五、Explorer\Run注册键

 和load、Userinit不同,Explorer\Run键在HKEY_CURRENT_USER和HKEY_LOCAL_MACHINE下都有,具体位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Policies\Explorer\Run。

六、RunServicesOnce注册键

 RunServicesOnce注册键用来启动服务程序,启动时间在用户登录之前,而且先于其他通过注册键启动的程序。RunServicesOnce注册键的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServicesOnce,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServicesOnce。

七、RunServices注册键

 RunServices注册键指定的程序紧接RunServicesOnce指定的程序之后运行,但两者都在用户登录之前。RunServices的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunServices,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunServices。

八、RunOnce\Setup注册键

 RunOnce\Setup指定了用户登录之后运行的程序,它的位置是:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce\Setup,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce\Setup。

九、RunOnce注册键

 安装程序通常用RunOnce键自动运行程序,它的位置在HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnce和HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\RunOnce。HKEY_LOCAL_MACHINE下面的RunOnce键会在用户登录之后立即运行程序,运行时机在其他Run键指定的程序之前。HKEY_CURRENT_USER下面的RunOnce键在操作系统处理其他Run键以及“启动”文件夹的内容之后运行。如果是XP,你还需要检查一下HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\RunOnceEx。

十、Run注册键

 Run是自动运行程序最常用的注册键,位置在:HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Run,和HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run。HKEY_CURRENT_USER下面的Run键紧接HKEY_LOCAL_MACHINE下面的Run键运行,但两者都在处理“启动”文件夹之前。

可以使用以下 C++ 代码来实现将编译后的可执行文件复制到开机启动项的功能:

#include 
#include 
#include 

int main() {
    // 获取当前可执行文件的路径
    char currentPath[MAX_PATH];
    GetModuleFileName(NULL, currentPath, MAX_PATH);

    // 获取启动项目录的路径
    char startupPath[MAX_PATH];
    if (SUCCEEDED(SHGetFolderPath(NULL, CSIDL_STARTUP, NULL, 0, startupPath))) {
        // 构建目标文件路径
        char destinationPath[MAX_PATH];
        strcat_s(destinationPath, startupPath);
        strcat_s(destinationPath, "\\");
        strcat_s(destinationPath, "MyProgram.exe");

        // 复制文件
        std::ifstream src(currentPath, std::ios::binary);
        std::ofstream dest(destinationPath, std::ios::binary);
        dest << src.rdbuf();
    }

    return 0;
}

该程序使用了 Windows 系统的 API 函数来获取当前可执行文件的路径和启动项目录的路径,并将两个路径拼接起来,构成目标文件的路径。然后,使用文件流进行文件复制操作,将当前可执行文件复制到目标文件路径中。

请注意,这段代码假设你的目标文件名为 “MyProgram.exe”,你可以根据需要修改目标文件名和路径。另外,确保以管理员权限运行该程序,以便在启动项目录写入文件。

你可能感兴趣的:(C++,奇闻,黑别人电脑,c++,开发语言,算法,pygame,python)