• 通过快速启动目录设置程序为开机启动


    实现原理:

      windows系统有自带的快速启动文件夹,只要把程序(一般是程序快捷方式)放入到这个快速启动文件夹中,系统在启动时就会自动地加载并运行相应的程序,实现开机自启动功能。

      注意:快速启动目录并不是一个固定的目录,每台计算机的快速启动目录都不相同。需要使用 SHGetSpecialFolderPath 函数获取Windows系统中快速启动目录的路径,快速启动目录的CSIDL标识值为CSIDL_STARTUP。

    实现过程:

      (1).获取快速启动目录的路径(使用 SHGetSpecialFolderPath)

      (2).创建程序的快捷方式到快速启动目录的路径下

    实现代码:

    BOOL bRet = FALSE;
        char szStartupPath[MAX_PATH] = { 0 };
        char szDestFilePath[MAX_PATH] = { 0 };
        USES_CONVERSION;
        char* pszFilePath = T2A(m_Edit_FilePath);
    
        // 获取快速启动目录的路径
        bRet = SHGetSpecialFolderPathA(NULL, szStartupPath, CSIDL_STARTUP, TRUE);
        printf("szStartupPath=%s
    ", szStartupPath);
        if (FALSE == bRet)
        {
            m_Edit_TipMsg = "获取快速启动目录的路径失败!";
            UpdateData(FALSE);
            return;
        }
    
        //创建快捷方式
        //初始化供调用线程使用的COM库,设置线程的并发模型,并在需要时为该线程创建一个新的单元
        HRESULT hr = CoInitializeEx(NULL, COINIT_MULTITHREADED);
        if (SUCCEEDED(hr))
        {
            IShellLink *pisl;
            hr = CoCreateInstance(CLSID_ShellLink, NULL,
                CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&pisl);
            if (SUCCEEDED(hr))
            {
                IPersistFile* pIPF;
    
                //这里是我们要创建快捷方式的原始文件地址
                pisl->SetPath(m_Edit_FilePath);
                hr = pisl->QueryInterface(IID_IPersistFile, (void**)&pIPF);
                if (SUCCEEDED(hr))
                {
                    //获取文件名
                    PathStripPathA(pszFilePath);
                    //拼接路径
                    wsprintfA(szDestFilePath, "%s\%s", szStartupPath, pszFilePath);
                    //注意路径后缀名要从exe改为lnk
                    int nLen = strlen(szDestFilePath);
                    szDestFilePath[nLen - 3] = 'l';
                    szDestFilePath[nLen - 2] = 'n';
                    szDestFilePath[nLen - 1] = 'k';
                    WCHAR* szwDestFilePath = A2W(szDestFilePath);
                    //这里是我们要创建快捷方式的目标地址
                    pIPF->Save(szwDestFilePath, FALSE);
                    //减少COM对象上接口的引用计数
                    pIPF->Release();
                }
                //减少COM对象上接口的引用计数
                pisl->Release();
            }
            //关闭当前线程上的COM库,卸载该线程加载的所有DLL
            CoUninitialize();
            m_Edit_TipMsg = "目标程序已添加到以下快速启动目录
    ";
            m_Edit_TipMsg += szStartupPath;
            m_Edit_TipMsg += "
    ";
            m_Edit_TipMsg += "可自行查看或删除
    ";
            UpdateData(FALSE);
    直面挫折,顽强生长
  • 相关阅读:
    C# 图形普通处理,resize ,水印..
    图像处理 形态学 (腐蚀 膨胀 开闭运算 连通分量....)
    获取usb设备父系或子代
    aforge通过角点匹配图片相似度
    CentOS 手动增加、删除swap区
    Zabbix 中文使用手册
    CentOS7下Firewall防火墙配置用法详解
    CentOS7安装Zabbix
    宅男也可变形男-我是如何在11个月零27天减掉80斤的
    CentOS环境下使用GIT基于Nginx的私服搭建全过程
  • 原文地址:https://www.cnblogs.com/ndyxb/p/12656209.html
Copyright © 2020-2023  润新知