|
#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("在快速启动栏创建快捷方式成功!"); }
|