Fizycznie "przeźroczysty" program.

0

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

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;

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