Jak odczytać lub zmienić położenie ikon pulpitu?

0

No więc pytałem się googli, ale wyskakują mi tylko tematy o tym jak ukryć ikony albo je pokazać. Po przeczytaniu artykułu na 4p, doszedłem do wniosku że ikony są klasy "progman". cytuję:

 [..]
Uchwyt := FindWindow('progman', nil );
 [..]
ShowWindow(Uchwyt, SW_HIDE)
[..]

Jednakże nic mi to nie mówi.

Pamiętam, że kiedyś widziałem sposób na zamknięcie okienka, które jest w punkcie X i Y, po uchwycie, ale nie wiem czy jest sens przerabiać to funkcje, której parametrem jest uchwyt i współrzędne, na funkcję która zwraca te współrzędne.

0

Mam gotowe kody, ale pod Windowsem 7 już nie działają. Ale spróbuj połączyć początek kodu z: http://stackoverflow.com/questions/1961556/how-to-get-set-desktop-icons-position-and-size-from-delphi i przetłumaczyć kod na Delphi z http://social.msdn.microsoft.com/Forums/en-US/winforms/thread/d7df8a4d-fc0f-4b62-80c9-7768756456e6/ od linijki:
GetWindowThreadProcessId(vHandle, out vProcessId);
ja później spróbuje też to zrobić, tylko trzeba później wykombinować jak je ułożyć i nie wiem czy się uda ptrzetłumaczyć, bo zamotany jak dla mnie równo ten kod a i czy pod Windows 7 będzie działać. Póki co zwraca mi prawidłowo ilość ikonek. A jeżeli nie musisz robić tego koniecznie samodzielnie to skorzystaj z programu na http://www.midiox.com/index.htm?http://www.midiox.com/desktoprestore.htm wersja 64 bitowa też działa ok.

var
  WHandle : HWND;
  ItemCount : integer;
begin
  WHandle := FindWindow('Progman', nil);
  if WHandle > 0 then
    WHandle := FindWindowEx(WHandle, 0, 'SHELLDLL_DefView', 0);
  if WHandle > 0 then
    WHandle := FindWindowEx(WHandle, 0, 'SysListView32', 0);
  if WHandle > 0 then
  begin
     ItemCount := SendMessage(WHandle, LVM_GETITEMCOUNT, 0, 0);
     SendMessage(WHandle, LVM_SETITEMPOSITION, 0, MakeLong(900, 200));
     ShoWMessage(IntToStr(ItemCount));
  end;

EDIT: masz przykłąd powyżej jak pobieram ilość ikon na pulpicie i ustawiam te pierwszą o indeksie zero. Resztę napiszę jak okiełznam ten przedziwny kod z podanej wyżej www.

0

Dobra, napiszę kolejny post. Kombinowałem długo i jedyną możliwością na odczytanie na nowszym systemi jakim jest Windows 7 Ultimate 64 bit to pakiet madshi z http://madshi.net i moduł madshell. Gotowy i prosty program w załączniku. Nie zbyt elegancko układa bardzo porozrzucane ikony i może to chwilę potrwać, ale innego sposobu nie wykombinuje. Jeżeli chcesz dojśc jak madshell odczytuje nazwy ikon z pulpitu oraz ich prawidlowe pozycje (najnowsza wersja została w tym celu poprawiona przez autora pakietu) to przeanalizuj sobie kod źródłowy jego modułów po zainstalowaniu. Jeżeli ktoś zna lepszy sposób to może Tobie napisze, a wracając do Twojego komentarza to aby mieć dostęp do stałych LVM_ trzeba dodać do sekcji uses moduł CommCtrl. Ja wymiękam, dosyć mam googlowania, ale widzę że Tobie się nie chce kombinować samodzielnie, jakbyś szukał dłużej w google to byś trafił na masę nie działających kodów, ale również i informacje, że można się wspomóc pakietem madshi, który powinien być osobie dłużej obcującej z Delphi raczej znany. Ja miałem go w starej wersji i odczytywał wprawdzie nazwy ikon, ale nie ich pozycje. Po odinstalowaniu starej i zainstalowaniu nowej wersji program działa jak należy. Co do pytania jaki moduł dodać aby coś zadziałało to powinieneś wiedzieć, że jest google lub help, a jak nie to TotalCommander w łapę, przechodzisz do podkatalogu LIB, Alt+F7 i szukasz w *.dcu żądanego tekstu. Oj leniuch z Ciebie i to straszny, a szkoda ;/

0

A czytałeś uważnie co napisałem? Przecież madshell jest częśćią pakietu z http://madshi.net/madCollection.exe - najnowsza wersja działa dobrze, wykrywa wersje Delphi i instaluje się w podanym katalogu (ja mam w C:\Program Files (x86)\MADCOLLECTION), pod Delphi 7 Personal działa dobrze, nie wiem jak z nowszymi, ale powinna też działać, a wystarczy tylko dodać do uses żądany moduł i używać go w kodzie, tak jak ja to zrobiłem - to wszystko. Zresztą w katalogu gdzie zainstalowałeś są też w jednum z podkatalogów dostępne normalnie źródła w postaci modułów *.pas.

1 użytkowników online, w tym zalogowanych: 0, gości: 1