2009-06-04 4 views
0

Comment puis-je changer la cible d'une icône de bureau (mais pas l'icône affichée) avec un "langage de programmation" (vbscript ou autre chose)?Modifier la cible d'une icône de bureau (mais pas l'icône "image")?

par exemple:

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

(avec firefox-logo-icon-image)

à

E: \ start_firefox.bat

(avec le même écran icône, et non l'icône « chauve-souris »)

+0

J'espère que vous utilisez cette habitude pour des raisons malveillantes ... –

Répondre

0

Voici un exemple 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

Et changer le chemin lui permettra toujours de maintenir l'icône du chemin précédent? Incroyable. –

+0

Semble raisonnable que les deux sont contrôlables indépendamment. Les fonctions, en général, ne devraient pas avoir d'effets secondaires. –

0

Depuis l'icône affichée par Windows (je suppose que vous utilisez Windows depuis que vous mentionnez \ Program Files \ et un .bat fichier) dépend de l'extension de fichier (BAT dans ce cas) et que l'extension de fichier détermine quelle icône est affichée, cela ne peut être fait sans réassocier une application particulière avec cette extension particulière (ne recommande pas). La meilleure chose que je peux penser est de remplacer le lien par un exécutable qui utilise l'icône de l'application que vous essayez de "usurper".

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

Alors, comment ça marche? Je vois que vous chargez le fichier cible dans le contexte IID_IShellLink, puis définissez un nouveau chemin, mais comment cela conserve-t-il l'ancienne icône tout en définissant une nouvelle cible? –

+0

Eh bien, je suppose que si vous ne plaisantez pas avec IShellLink :: SetIconPath ou quoi que ce soit, alors il ne le changera pas. Il est possible que SetPath ait des effets secondaires ... dans ce cas, vous devrez simplement appeler SetIconPath par la suite et le pointer vers l'icône de votre choix. Cependant, si l'application cible est désinstallée, votre icône disparaîtra. –

Questions connexes