Jaki komunikat jest wysyłany przy ukrywaniu pulpitu?

0

Chodzi mi o akcję nazywaną w internetach "ToggleDesktop", można ją wywołać przez kliknięcie "Pokaż pulpit" albo Win + D.

Przeleciałem pierdyliard stron w google, czytałem setki tematów, ale znalazłem tylko wątki o tym że ktoś sobie usunął ikonkę "Pokaż pulpit".

WM_MINIMIZE, WM_SYSCOMMAND nie działają :/

Nie jestem nawet pewny czy to jest komunikat, czy tylko jakaś funkcja którą można wyciągnąć z WinAPI.

W każdym razie chciałbym tylko "wiedzieć" (tj. mój program) kiedy to się dzieje. Any help?

0

A dlaczego nie wystarczy ci utrata focusu?

Odpal sobie Spy++ (64-bitowego, jeżeli taki masz system), zaznacz któreś z okien pulpitu i podglądaj wiadomości jakie dostaje. Ciekawie zapowiada się WM_USER+83.

0

To jest program który właściwie MA nie mieć focusu. Nie ma belki okna (wszystko obsłużyłem ręcznie) ani także ikony na pasku zadań. Wszystko działa dobrze do momentu kiedy ktoś nie wciśnie "Pokaż pulpit". Wtedy jedyna możliwość żeby go przywrócić to Alt + Tab lub Win+D.

Już sprawdzam program.

0

Cytat od cioci W.

Wikipedia napisał(a)

Usługa Windows – proces wykonywany wewnątrz środowiska systemowego Windows, przeznaczony do specjalnych funkcji i niewymagający interakcji z użytkownikiem komputera.

Mój program wymaga interakcji z użytkownikiem. W sumie to on działa tak jak gadżet. Siedzi tylko na pulpicie i czasami robi to czego od niego chcą. Na tej zasadzie. Belka i ikona na pasku zadań po prostu "kłócą się" z estetyką programu, dlatego zrezygnowałem z nich i nie mogę korzystać z ich dobrodziejstw.

0

I właśnie w takich przypadkach pytający powinien opisać swój problem, a nie szukać pomocy przy rozwiązaniu, które jemu wydaje się właściwe. Bardzo często zwyczajnie nie jest i szkoda, że trzeba do tego dochodzić w pięciu następnych postach bawiąc się w grę stu pytań.

Ustaw parent swojego okna na kontrolkę SysListView32 pulpitu. Okno będzie nad ikonami, pod wszystkimi innymi oknami i nie schowa go opcja "pokaż pulpit".

0

Zrobiłem tak jak powiedziałeś i okno nadal znika po "Pokaż pulpit".

0

Nie wiem co to jest TWinControl. Prawdopodobnie nie chodzi o to.

  1. Uchwyt pulpitu to GetDesktopWindow().
  2. Wyszukujesz okno potomne za pomocą FindWindow().
  3. Ustawiasz je jako rodzica za pomocą SetParent().
1

aaa SetParent. używałem operatora := (Tak btw TWinControl jest parametrem SetParent());

Nie jest. Nie operuj na abstrakcjach z Borlanda, bo okno pulpitu nie jest kontrolką Borlandu.

Wywołaj tę funkcję: HWND SetParent(HWND hWndChild, HWND hWndNewParent);
http://msdn.microsoft.com/en-us/library/windows/desktop/ms633541%28v=vs.85%29.aspx

0

Zamieszczam kod dla potomnych. Wielkie dzięki @Rev za poświęcony czas.

var 
  aHandle: HWND;
begin
  aHandle := FindWindow('Progman', nil);
  aHandle := FindWindowEx(aHandle, 0, 'SHELLDLL_DefView', nil);
  aHandle := FindWindowEx(aHandle, 0, 'SysListView32', nil);

  Windows.SetParent(Form1.Handle, aHandle);
end;
0

Jeszcze jedno pytanko, jakie mogą byś skutki uboczne (i czym spowodowane) takiej zmiany?

Gdy uruchomiłem ten kod na nowym pliku, wszystko było okej. Gdy przeniosłem go do kodu programu (tego głównego) MainForm zniknęła :( Po prostu jej nie ma (tzn pewnie jest, ale jej nie widać).

0

Zostawiam dla potomnych, to co udało mi się znaleźć.

Przy wciśnięciu "Pokaż pulpit" jak i przy kliknięciu przycisku Minimalizacji na belce, wysyłany jest komunikat WM_SHOWWINDOW z parametrami WParam 0 lub 1 (0 ukryj okno, 1 pokaż okno) oraz LParam 3 lub 1 (z moich prób) 1-przy chowaniu, 3-przy pokazywaniu. Co ciekawe wysyłany jest dwa razy, drugim razem z LParam=0;

Żeby pokazać znowu okno ani Application.BringToFront, ani Form1.BringToFront nie działają. Działa natomiast kod

Form1.Visible := False;
Form1.Visible := True.

O ile przy zminimalizowanym "ręcznie" oknem działa bardzo dobrze, o tyle przy "Pokazanym pulpicie" okno się pokazuje a potem znowu znika (tak jakby komunikat "chowania" był wysyłany ciągle).

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