Windows自启动技术-快速启动目录 - nice_0e3
2022-6-23 01:56:0 Author: www.cnblogs.com(查看原文) 阅读量:15 收藏

前言

最近比较忙,整理一点琐碎的东西

自启动技术

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


代码比较简单,就是获取快速启动目录,然后将文件需要开机启动文件拷贝到该目录下

重启电脑


文章来源: https://www.cnblogs.com/nice0e3/p/16403825.html
如有侵权请联系:admin#unsafe.sh