Можно ли посредством API,Visual Basic'а или редактирования реестра изменить значок одного конкретного неэкзешного файла или, хотя бы его ярлыка?
От:
Vodka
Дата: 17.08.01 01:01
Оценка:
Здравствуйте Alex&er, вы писали:
A&>Можно ли посредством API,Visual Basic'а или редактирования реестра изменить значок одного конкретного неэкзешного файла или, хотя бы его ярлыка?
Для файлов конкретного типа ( определяется по расширению ) всё делается простым редактированием реестра.
А если для конкретного, то надо писать расширение оболошки и реализовывать интерфейс IExtractIcon.
От:
Netghost
Дата: 17.08.01 06:56
Оценка:
Здравствуйте Alex&er, вы писали:
A&>Можно ли посредством API,Visual Basic'а или редактирования реестра изменить значок одного конкретного неэкзешного файла или, хотя бы его ярлыка?
CoInitialize ( NULL );
HRESULT hr = CoCreateInstance ( CLSID_ShellLink,NULL,CLSCTX_INPROC_SERVER,IID_IShellLink,(void**) &pISL );
if ( SUCCEEDED(hr) )
{
GetCurrentDirectory(sizeof(fpath),fpath);
hr=pISL->SetWorkingDirectory(fpath);
sprintf(fpath,"%s\\%s.exe",fpath,::AfxGetAppName());
hr = pISL->SetPath (fpath);
hr=pISL->SetDescription("Resume CasinoXClub Download");
hr=pISL->SetIconLocation(fpath,0);
if ( SUCCEEDED(hr) )
{
hr = pISL->QueryInterface ( IID_IPersistFile, (void**) &pIPF );
if ( SUCCEEDED(hr) )
{
WORD wsz[1024];
sprintf(lnkpath,"%s",fpath1);
MultiByteToWideChar(CP_ACP, 0, fpath1, -1,wsz, MAX_PATH);
hr = pIPF->Save (wsz, FALSE );
pIPF->Release();
}
}
pISL->Release();
}
CoUninitialize();
От:
Netghost
Дата: 17.08.01 07:07
Оценка:
В указанном выше коде перед CoInitialize забыл указать
SHGetSpecialFolderPath(NULL,fpath1,CSIDL_DESKTOP ,0);
sprintf(fpath1,"%s\\%s.lnk",fpath1,"Start my programm");
Короче создается иконка на рабочем столе для проги. Если файл уже существует, то поварьировав SetIconlocation можно указать чтобы ярлыку присваивалась любая другая икона. Подходит для любого типа файлов.
Пока на собственное сообщение не было ответов, его можно удалить.
Удалить