Konkretnie chodzi mi o to, żeby program był widzialny, jednak mimo to nie ingerował w działanie na komputerze. Powiedzmy, że mam na całym ekranie uruchomiony program, a chce wejść w Mój Komputer i normalnie mi się to udaje :).
0
0
przekazuj komunikaty do okienek pod spodem
0
Mniej więcej tak jak w przykładzie poniżej ale to obsługa tylko pulpitu nie działa na inne okna znajdujące się pod oknem programu aby działało to trzeba by jakoś pobierać uchwyt okna znajdującego się pod spodem (chyba funkcja GetWindow pozwala na coś takiego) i dalej sprawdzać czy zdarzenie nie miało miejsca przypadkiem nad oknem potomnym i to do niego wysyłać odpowiedni komunikat tylko znowu zabawa w przeliczanie współrzędnych.
//w OnMessage TApplicationEvents
procedure TForm1.ApplicationEvents1Message(var Msg: tagMSG;
var Handled: Boolean);
var
p: TPoint;
begin
case Msg.message of
WM_LBUTTONDOWN, WM_LBUTTONUP, WM_LBUTTONDBLCLK: // w przykladzie interesuje nas tylko lewy przycisk mychy
begin
//pobierz wspolrzedne
p.X:= LoWord(Msg.lParam);
p.Y:= HiWord(Msg.lParam);
//przelicz wspolrzedne okna na ekranu
Windows.ClientToScreen(Handle, p);
//wyslij komunikat
PostMessage(hWin, Msg.message, Msg.wParam, MakeLParam(p.X, p.Y));
end;
end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
//zdobyc uchwyt ListView z ikonami pulpitu
hWin:= FindWindow('ProgMan', 0);
hWin:= GetWindow(hWin, GW_CHILD);
hWin:= GetWindow(hWin, GW_CHILD);
end;