Windows自啓動技術快速啓動目錄
前言
最近比較忙,整理一點瑣碎的東西
自啓動技術
在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;
}
代碼比較簡單,就是獲取快速啓動目錄,然後將文件需要開機啓動文件拷貝到該目錄下
重啓電腦