#include <objidl.h> #include <shlobj.h> ... //--------------------------------------------------------------------- #define HOTKEY(modifier,key) ((((modifier)&0xff)<<8)|((key)&0xff)) //--------------------------------------------------------------------- // Создание ярлыка // Входные параметры: // pwzShortCutFileName - путь и имя ярлыка, например, "C:\\Блокнот.lnk" // Если не указан путь, ярлык будет создан в папке, указанной в следующем параметре. // Прим.: Windows сама НЕ добавляет к имени расширение .lnk // pszPathAndFileName - путь и имя exe-файла, например, "C:\\Windows\\NotePad.Exe" // pszWorkingDirectory - рабочий каталог, например, "C:\\Windows" // pszArguments - аргументы командной строки, например, "C:\\Doc\\Text.Txt" // wHotKey - горячая клавиша, например, для Ctrl+Alt+A HOTKEY(HOTKEYF_ALT|HOTKEYF_CONTROL,'A') // iCmdShow - начальный вид, например, SW_SHOWNORMAL // pszIconFileName - путь и имя файла, содержащего иконку, например, "C:\\Windows\\NotePad.Exe" // int iIconIndex - индекс иконки в файле, нумеруется с 0 bool __fastcall CreateShortCut( LPWSTR pwzShortCutFileName, LPTSTR pszPathAndFileName, LPTSTR pszWorkingDirectory, LPTSTR pszArguments, WORD wHotKey, int iCmdShow, LPTSTR pszIconFileName, int iIconIndex) { IShellLink * pSL; IPersistFile * pPF; HRESULT hRes; // Получение экземпляра компонента "Ярлык" hRes = CoCreateInstance(CLSID_ShellLink, 0, CLSCTX_INPROC_SERVER, IID_IShellLink, (LPVOID *)&pSL); if( SUCCEEDED(hRes) ) { hRes = pSL->SetPath(pszPathAndFileName); if( SUCCEEDED(hRes) ) { hRes = pSL->SetArguments(pszArguments); if( SUCCEEDED(hRes) ) { hRes = pSL->SetWorkingDirectory(pszWorkingDirectory); if( SUCCEEDED(hRes) ) { hRes = pSL->SetIconLocation(pszIconFileName,iIconIndex); if( SUCCEEDED(hRes) ) { hRes = pSL->SetHotkey(wHotKey); if( SUCCEEDED(hRes) ) { hRes = pSL->SetShowCmd(iCmdShow); if( SUCCEEDED(hRes) ) { // Получение компонента хранилища параметров hRes = pSL->QueryInterface(IID_IPersistFile,(LPVOID *)&pPF); if( SUCCEEDED(hRes) ) { // Сохранение созданного ярлыка hRes = pPF->Save(pwzShortCutFileName,TRUE); pPF->Release(); } } } } } } } pSL->Release(); } return SUCCEEDED(hRes); }
|