創建快捷方式

#include <iostream>
#include <atlconv.h>
#include <ShlObj.h>
#include <Shlwapi.h>

#pragma comment(lib, "Shlwapi.lib")

void createShutcut(char* szExe, char* szLink)
{
    ::CoInitialize(NULL);

    HRESULT hr = S_OK;
    IShellLink * pShl = NULL;
    IPersistFile * ppf = NULL;

    hr = ::CoCreateInstance(  // 啓動組件
        CLSID_ShellLink,      // 快捷方式 CLSID
        NULL,                 // 聚合用(注4)
        CLSCTX_INPROC_SERVER, // 進程內(Shell32.dll)服務
        IID_IShellLink,       // IShellLink 的 IID
        (LPVOID *)&pShl);     // 得到接口指針

    if (SUCCEEDED(hr))
    {
        pShl->SetPath(szExe);   // 全路徑程序名
        //pShl->SetArguments();      // 命令行參數
        //pShl->SetDescription();    // 備註
        //pShl->SetHotkey();         // 快捷鍵
        //pShl->SetIconLocation();   // 圖標
        //pShl->SetShowCmd();        // 窗口尺寸

        // 根據 EXE 的文件名,得到目錄名
        char workDir[MAX_PATH] = { 0 };
        strcpy_s(workDir, szExe);
        PathRemoveFileSpecA(workDir);
        // 設置 EXE 程序的默認工作目錄

        pShl->SetWorkingDirectory(workDir);

        hr = pShl->QueryInterface(  // 查找持續性文件接口指針
            IID_IPersistFile,      // 持續性接口 IID
            (LPVOID *)&ppf);      // 得到接口指針

        if (SUCCEEDED(hr))
        {
            USES_CONVERSION;
            ppf->Save(A2OLE(szLink), TRUE);
        }
    }

    if (pShl)
    {
        pShl->Release();
    }
    if (ppf)
    {
        ppf->Release();
    }

    ::CoUninitialize();
}

int main(int argc, char* argv[])
{
    createShutcut("C:\\Program Files (x86)\\Notepad++\\notepad++.exe",  // 記事本程序。注意,你的系統是否也是這個目錄?
        "C:\\Users\\Administrator\\Desktop\\我的記事本.lnk");
    // 桌面上建立快捷方式(lnk)文件的全路徑名。注意,你的系統是否也是這個目錄?
    // 如果用程序實現尋找桌面的路徑,則可以查註冊表
    // HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\Shell Folders
    return 0;
}

發佈了42 篇原創文章 · 獲贊 4 · 訪問量 5萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章