#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;
}
創建快捷方式
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.