最近比较忙,整理一点琐碎的东西
在windows 系统中,存在很多可以实现开启自启动的地方。windows系统下有自带的快速启动文件夹。只要程序放到这个快速启动目录下,系统在启动的时候会自动加载并且运行这个程序,实现开机启动。
快速启动的目录不是一个固定的目录,每台机器的快速启动目录不同。
BOOL SHGetSpecialFolderPathA(
HWND hwnd,
[out] LPSTR pszPath,
[in] int csidl,
[in] BOOL fCreate
);
获取指定的系统路径
hwnd
类型:HWND
预订的。
[out] pszPath
类型:LPTSTR
指向以空字符结尾的字符串的指针,该字符串接收指定文件夹的驱动器和路径。此缓冲区的大小必须至少为 MAX_PATH 个字符。
[in] csidl
类型:整数
标识感兴趣文件夹的CSIDL。如果指定了虚拟文件夹,此功能将失败。
[in] fCreate
类型:布尔
指示如果文件夹尚不存在,是否应创建该文件夹。如果此值非零,则创建文件夹。如果此值为零,则不创建文件夹。
返回值
类型:布尔
如果成功,则为TRUE ;否则,FALSE。
#include <iostream>
#include <Windows.h>
#include <Windows.h>
#include <Shlobj.h>
#pragma comment(lib, "shell32.lib")
BOOL AutoRun_Startup(const char* lpszSrcFilePath, const char* lpszDestFileName)
{
BOOL bRet = FALSE;
char szStartupPath[MAX_PATH] = { 0 };
char szDestFilePath[MAX_PATH] = { 0 };
// 获取 快速启动目录 路径
bRet = ::SHGetSpecialFolderPath(NULL, szStartupPath, CSIDL_STARTUP, TRUE);
//CSIDL_STARTUP为开始菜单/程序/启动目录
printf("szStartupPath=%s\n", szStartupPath);
if (FALSE == bRet)
{
return FALSE;
}
// 构造拷贝的 目的文件路径
::wsprintf(szDestFilePath, "%s\\%s", szStartupPath, lpszDestFileName);
// 拷贝文件到快速启动目录下
bRet = ::CopyFile(lpszSrcFilePath, szDestFilePath, FALSE);
if (FALSE == bRet)
{
return FALSE;
}
return TRUE;
}
int main(int argc, TCHAR* argv[])
{
if (FALSE == AutoRun_Startup("C:\\Users\\Public\\hello.exe", "hello.exe"))
{
printf("Startup Error!\n");
}
printf("Startup OK!\n");
system("pause");
return 0;
}
代码比较简单,就是获取快速启动目录,然后将文件需要开机启动文件拷贝到该目录下
重启电脑