Re: программа-инсталлятор
|
От: |
muma
|
|
| Дата: | 19.05.01 18:53 |
|
Оценка: |
|
Создать линк, удалить линк ) ....
#include <shlobj.h>
.....
.....
void LinkCreate(LPTSTR fname_to_create_link, LPTSTR lnk_fname, int nFolder, LPTSTR lsWorkDir)
{
IShellLink *psl = NULL;
IPersistFile *pPf = NULL;
WORD wsz[MAX_PATH];
TCHAR buffer[MAX_PATH];
LPITEMIDLIST pidl;
if(!FAILED(OleInitialize(NULL)))
if(!FAILED(CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER,IID_IShellLink, (LPVOID*)&psl)))
if(!FAILED(psl->QueryInterface(IID_IPersistFile, (LPVOID*)&pPf)))
if(!FAILED(psl->SetPath(fname_to_create_link)))
if(!FAILED(psl->SetWorkingDirectory(lsWorkDir)))
{
if(nFolder == CSIDL_STARTUP)
{
// если хочешь свернутое
//psl->SetShowCmd(SW_SHOWMINNOACTIVE);
// если хочешь аргументы
//psl->SetArguments("/a1 /a2");
}
//place the shortcut on the nFolder
SHGetSpecialFolderLocation(NULL, nFolder, &pidl);
SHGetPathFromIDList(pidl, buffer);
lstrcat(buffer,"\\");
lstrcat(buffer,lnk_fname);
MultiByteToWideChar(CP_ACP, 0, buffer, -1, wsz, MAX_PATH);
pPf->Save(wsz, TRUE);// == S_OK
}
if(pPf) pPf->Release();
if(psl) psl->Release();
}
void LinkRemove(LPTSTR lnk_fname, int nFolder)
{
TCHAR buf[MAX_PATH];
LPITEMIDLIST pidl;
SHGetSpecialFolderLocation(NULL, nFolder, &pidl);
SHGetPathFromIDList(pidl, buf);
lstrcat(buf,"\\");
lstrcat(buf,lnk_fname);
DeleteFile(buf);
}
Използование
LinkCreate(lpFileForLink, g_szLinkFileName,CSIDL_STARTUP,szWorkDir);
LinkCreate(lpFileForLink, g_szLinkFileName,CSIDL_DESKTOP,szWorkDir);
LinkCreate(lpFileForLink, g_szLinkFileName,CSIDL_STARTMENU,szWorkDir);
LinkCreate(lpFileForLink, g_szLinkFileName,CSIDL_PROGRAMS,szWorkDir); /// ------ !!!
и т.д.
LinkRemove(g_szLinkFileName,CSIDL_DESKTOP);
LinkRemove(g_szLinkFileName,CSIDL_STARTMENU);
LinkRemove(g_szLinkFileName,CSIDL_STARTUP);
LinkRemove(g_szLinkFileName,CSIDL_PROGRAMS);
и.т.д.
Пока на собственное сообщение не было ответов, его можно удалить.