Как создать ярлык?
Использую для создания ярлыка функции SHCreateShortcut() или CeSHCreateShortcut(). Подключаю Shellapi.h. Компилятор выдает сообщение "error C2065: 'SHCreateShortcut' : undeclared identifier". Кто виноват и что делать?
Как программно создать ярлык (WinAPI)
HRESULT CreateLink (LPCSTR lpszPathObj, LPCSTR lpszPathLink, LPSTR lpszDesc)
{
HRESULT hres;
IShellLink *psl;
// Get a pointer to the IShellLink interface.
hres = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IShellLink, (void**)&psl);
if (SUCCEEDED(hres))
{
IPersistFile *ppf;
// Set the path to the shortcut target and add the description.
psl->SetPath(lpszPathObj);
psl->SetDescription(lpszDesc);
// Query IShellLink for the IPersistFile interface for saving the
// shortcut in persistent storage.
hres = psl->QueryInterface(IID_IPersistFile, (void**)&ppf);
if (SUCCEEDED(hres))
{
WORD wsz[MAX_PATH];
// Ensure that the string is ANSI.
MultiByteToWideChar(CP_ACP, 0, lpszPathLink, -1, wsz, MAX_PATH);
// Save the link by calling IPersistFile::Save().
hres = ppf->Save(wsz, TRUE);
ppf->Release();
}
psl->Release();
}
return hres;
}
lpszPathObj - файл, на который созхдаёться ярлык
lpszPathLink - полное имя файла ярлыка
lpszDesc - комментарий (в 2000 и ME показывается во всплывающей подсказке в меню "Пуск")
Перед этим необходимо вызовать CoInitialize(0).
Поподробнее: MSDN - раздел shell.
Уже разобрался, но все равно, спасибо!
Цитата:
Originally posted by Doomych
Использую для создания ярлыка функции SHCreateShortcut() или CeSHCreateShortcut(). Подключаю Shellapi.h. Компилятор выдает сообщение "error C2065: 'SHCreateShortcut' : undeclared identifier". Кто виноват и что делать?
Использую для создания ярлыка функции SHCreateShortcut() или CeSHCreateShortcut(). Подключаю Shellapi.h. Компилятор выдает сообщение "error C2065: 'SHCreateShortcut' : undeclared identifier". Кто виноват и что делать?
Просто компилятор был раньше, чем эта функция.
Попробуй загрузить функцию напрямую из dll.
typedef BOOL (_stdcall* qwe)(LPTSTR, LPTSTR);
qwe SHCreateShortcut = NULL;
HINSTANCE hu = LoadLibrary("shortcut.dll");
SHCreateShortcut = (qwe)GetProcAddress(hu, "SHCreateShortcut");
И юзай назровье, с понтом подключил shellapi.h. Кстати, пордключи windows.h.
С уважением, Deus.