Windows自啓動技術-快速啓動目錄

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;
}


代碼比較簡單,就是獲取快速啓動目錄,然後將文件需要開機啓動文件拷貝到該目錄下

重啓電腦

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章