2009-06-04 3 views
0

Как изменить цель значка рабочего стола (но не отображаемого значка) с помощью «языка программирования» (vbscript или что-то еще)?Измените цель значка на рабочем столе (но не значок «картинка»)?

, например:

C: \ Program Files \ Mozilla Firefox \ Firefox.exe

(с светлячок-логотип-значок-изображение)

к

E: \ start_firefox.bat

(с тем же значком дисплея, а не значок «летучая мышь»)

+0

Я надеюсь, что вы не будете использовать это для каких-либо вредоносных причин ... –

ответ

0

Вот пример VBScript:

' ChangeDesktopLink.vbs 

' Uncomment the proper constant: 
' Const DESKTOP_DIR = &H19 ' Common desktop folder, e.g. C:\Documents and Settings\All Users\Desktop 
Const DESKTOP_DIR = &H10 ' User's desktop folder, e.g. C:\Documents and Settings\<username>\Desktop 

Set oShell = CreateObject("Shell.Application") 
With oShell.Namespace(DESKTOP_DIR).ParseName("Firefox.lnk").GetLink 
    .Path = "E:\start_firefox.bat" 
    .Save 
End With 
+0

И изменение пути все равно позволит сохранить значок с предыдущего пути? Удивительно. –

+0

Кажется разумным, что они управляются независимо. Функции, как правило, не должны иметь побочных эффектов. –

0

Поскольку значок отображается на Windows (я предполагаю, что вы работаете в Windows, так как вы упоминаете \ Program Files \ и .bat файл) зависит от расширения файла (в данном случае BAT), и это расширение файла определяет, какой значок отображается, это невозможно сделать, не переназначая конкретное приложение с этим конкретным расширением (которое я рекомендую не).

Следующее, что я могу думать, это заменить ссылку на исполняемый файл, который использует значок приложения, которое вы пытаетесь «обмануть».

0
// Assume you have the path to the shortcut in pszFilename. 

CComPtr<IPersistFile> persist_file; 
HRESULT hr = CoCreateInstance(CLSID_ShellLink, NULL, CLSCTX_INPROC_SERVER, IID_IPersistFile, (LPVOID*)&persist_file); 
if (SUCCEEDED(hr)) { 
    hr = persist_file->Load(pszFilename, 0); 
} 

CComPtr<IShellLink> shell_link; 
if (SUCCEEDED(hr)) { 
    hr = persist_file->QueryInterface(IID_IShellLink, (void**)&shell_link); 
} 

// Assume the new target you want to set is in pszNewTargetPath. 

if (SUCCEEDED(hr)) { 
    hr = shell_link->SetPath(pszNewTargetPath); 
} 

if (SUCCEEDED(hr)) { 
    hr = persist_file->Save(pszFilename, true); 
} 
+0

Итак, как же это работает? Я вижу, что вы загружаете целевой файл в контексте IID_IShellLink, а затем устанавливаете новый путь, но как это сохранить старый значок, но установил новую цель? –

+0

Ну, я предполагаю, что если вы не будете связываться с IShellLink :: SetIconPath или что-то еще, то это не изменит его. Возможно, у SetPath есть побочные эффекты ... в этом случае вам просто нужно будет вызвать SetIconPath после этого и указать его на выбранный вами значок. Хотя если целевое приложение будет удалено, значок исчезнет. –

Смежные вопросы