[Delphi;Win98] Desktop-Icons

Wie kann ich die Positionen der einzelnen Icons auf dem Desktop auslesen und evtl. neue Positionen speichern?

Weis ich jetzt zwar auch nicht, doch wenn das geht, dann wird wohl das IShellLink-Interface der Windows Shell eine Methode dazu deklarieren.

Wie kann ich die Positionen der einzelnen
Icons auf dem Desktop auslesen und evtl.
neue Positionen speichern?

Hi Marc,
der Windows-Desktop wird von einem normalen Listview überlagert, in dem die einzelnen Icons als Einträge angeordnet sind. Um auf diese zuzugreifen, brauchst Du das Handle dieses Listviews

function GetDesktopListViewHandle: THandle; var
 s: String; 
begin
 Result := FindWindow('ProgMan', nil); 
 Result := GetWindow(Result, GW\_CHILD);
 Result := GetWindow(Result, GW\_CHILD); 
 SetLength(s, 40);
 GetClassName(Result, PChar(s), 39);
 if PChar(s) 'SysListView32' then 
 Result := 0; 
end;

Wenn Du dieses Handle erstmal hast, dann kannst Du mit den API-Listview-Funktionen aus der CommCtrl-Unit den Desktop manipulieren. Alle LVM_xxxx Messages aus der Win32-Doku kannst Du verarbeiten und natürlich auch an den Listview senden.

Hier ein kleines Beispiel, das die Icons linksbündig auf dem Desktop anordnet (wie die Funktion „Automatisch anordnen“ aus dem Kontextmenü):

SendMessage(GetDesktopListViewHandle, LVM\_ALIGN, LVA\_ALIGNLEFT, 0);

Selbst ausprobiert habe ich es auch noch nicht, habe den Tip nur hier aus meiner Datenbank (kommt von Borland)…viel Glück :o))

Gruß Thomas

P.S. Wo Du den ganzen Mist dann abspeichern mußt, damit die Anordnung beim nächsten Start wieder hergestellt wird, weiß ich allerdings auch nicht…sicher irgendwelche Registry-Einträge…

Gruß Thomas