windows - Skift mål for et skrivebordsikon (men ikke ikonet 'billede')?

Indlæg af Hanne Mølgaard Plasc

Problem



Hvordan kan jeg ændre målet på et desktopikon (men ikke det viste ikon) med et 'programmeringssprog' (vbscript eller noget andet)?


for eksempel:



  C: \ Programmer \ Mozilla
  Firefox \ firefox.exe



(med firefox-logo-ikon-billede)


til



  E: \ start\_firefox.bat



(med det samme displayikon og ikke ikonet 'bat')

Bedste reference


Her er en VBScript-prøve:


' ChangeDesktopLink.vbs

' Uncomment the proper constant:
' Const DESKTOP\_DIR = &H19   ' Common desktop folder, e.g. C:Documents and SettingsAll UsersDesktop
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

Andre referencer 1


Da ikonet, der vises af Windows (jeg antager, at du kører Windows, da du nævner \ Programmer \ og en .bat-fil), er afhængig af filtypen (BAT i dette tilfælde), og at filtypen bestemmer hvilket ikon der vises , dette kan ikke gøres uden at genforene en bestemt applikation med den pågældende udvidelse (som jeg ikke anbefaler ).


Det næste bedste, jeg kan tænke, er at erstatte linket med en eksekverbar, der bruger ikonet for programmet, du forsøger at 'spoofe.'

Andre referencer 2


// 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);
}