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

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

    重启电脑

  • 相关阅读:
    [日常] Go语言圣经-命令行参数
    [日常] Go语言圣经前言
    [日常] 搭建golang开发环境
    [日常] 研究redis未授权访问漏洞利用过程
    [日常] CentOS安装最新版redis设置远程连接密码
    [日常] Apache Order Deny,Allow的用法
    [日常] 读取队列并循环发信的脚本
    [日常] 20号日常工作总结
    [日常] SinaMail项目和技术能力总结
    [日常] MySQL的预处理技术测试
  • 原文地址:https://www.cnblogs.com/nice0e3/p/16403825.html
Copyright © 2020-2023  润新知