如何在快速启动栏创建快捷方式 #define NO_WIN32_LEAN_AND_MEAN #include <shlobj.hpp> #include <vcl.h> // 以上三行放在单元文件最开始
//--------------------------------------------------------------------------- struct TShortcutCfg { // 构造函数 TShortcutCfg() { nShowCmd = SW_SHOWNORMAL; wHotKey = 0; nIconIndex = 0; } // 结构成员: AnsiString strShortcutName; // AnsiString strLnkDir; // AnsiString strDestFile; // AnsiString strArguments; // AnsiString strIconFile; // int nIconIndex; // AnsiString strWorkingDir; // AnsiString strDescription; // WORD wHotKey; // int nShowCmd; // }; //--------------------------------------------------------------------------- // 在快速启动栏创建快捷方式 bool CreateQuickLaunchShortcut(TShortcutCfg *scConfig) { char szBuf[MAX_PATH]; bool bReturn = true; wchar_t wszBuf[MAX_PATH]; IShellLink *pShellLink; AnsiString strShortcutFile;
LPITEMIDLIST lpItemIdList; SHGetSpecialFolderLocation(0, CSIDL_APPDATA, &lpItemIdList); SHGetPathFromIDList(lpItemIdList, szBuf); if(DirectoryExists(AnsiString(szBuf))) { strShortcutFile = AnsiString(szBuf) + "\\Microsoft\\Internet Explorer\\Quick Launch\\" + scConfig->strShortcutName + ".lnk"; strShortcutFile.WideChar(wszBuf, MAX_PATH); } else bReturn = false;
if(bReturn) { bReturn = CoCreateInstance (CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void **)&pShellLink) >= 0;
if(bReturn) { IPersistFile *ppf; bReturn = pShellLink->QueryInterface(IID_IPersistFile, (void **)&ppf) >= 0; if(bReturn) { // 目标文件 if(scConfig->strDestFile != EmptyStr) bReturn = pShellLink->SetPath(scConfig->strDestFile.c_str()) >= 0; // 参数 if(bReturn && scConfig->strArguments != EmptyStr) bReturn = pShellLink->SetArguments(scConfig->strArguments.c_str()) >= 0; // 显示图标 if(bReturn && scConfig->strIconFile != EmptyStr && FileExists(scConfig->strIconFile)) pShellLink->SetIconLocation(scConfig->strIconFile.c_str(), scConfig->nIconIndex); // 起始位置 if(bReturn && scConfig->strWorkingDir != EmptyStr) pShellLink->SetWorkingDirectory(scConfig->strWorkingDir.c_str()); // 备注 if(bReturn && scConfig->strDescription != EmptyStr) pShellLink->SetDescription(scConfig->strDescription.c_str()); // 快捷键 if(bReturn && scConfig->wHotKey != 0) pShellLink->SetHotkey(scConfig->wHotKey); // 运行方式 if(bReturn && scConfig->nShowCmd != 0) pShellLink->SetShowCmd(scConfig->nShowCmd);
if(bReturn) bReturn = (ppf->Save(wszBuf, TRUE) >= 0);
ppf->Release (); } pShellLink->Release (); } } return bReturn; } // 调用代码举例: //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { TShortcutCfg scShortcut; scShortcut.strDestFile = "C:\\123\\123.exe"; scShortcut.strShortcutName = "test";
if(CreateQuickLaunchShortcut(&scShortcut)) ShowMessage("在快速启动栏创建快捷方式成功!"); } //---------------------------------------------------------------------------
|