Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi aktives Fensterhandle bekommen (https://www.delphipraxis.net/3755-aktives-fensterhandle-bekommen.html)

Alexander 28. Mär 2003 16:03


aktives Fensterhandle bekommen
 
Hi
ich habe mal wieder eine Frage und zwar wie kann ich das Handle eines Fensters (gesamte Fenster...), das aktive und oben liegt herausfinden?
Nun kommt die Schwierigkeit. Normalerweise ginge, dass ja mit GetForeGroundWindow(), doch jetzt liegt mein Programm in der TNA und wenn auf das Icon ein Rechtsklich gemacht wird, erscheinnt ein PopUpMenü und wenn dann auf ein Item geklickt wird, soll das Handle herausgefungen werden.
Das Problem dabei ist ja, dass das Fenster nicht mehr aktiv ist (durch den Klick). D.h. ja das ich das Handle schon vorher rausbekommen muss. Nur wie?

//Nachtrag:
Folgendermaßen packe ich meine Anwendung in die TNA bzw. entferne es, usw.:
Delphi-Quellcode:
procedure TForm1.WMTASKBAREVENT(var message: TMessage);
var
  point: TPoint;
begin
  case message.LParamLo of
    WM_RBUTTONDOWN:
      begin
        GetCursorPos(point);
        popupmenu1.popup(point.x, point.y);
      end;
  end;
end;


procedure TaskBarAddIcon;
var tnid : TNOTIFYICONDATA ;
begin
    tnid.cbSize := sizeof(TNOTIFYICONDATA);
    tnid.Wnd := Form1.handle;
    tnid.uID := 1;
    tnid.uFlags := NIF_MESSAGE or NIF_ICON or NIF_TIP;
    tnid.uCallbackMessage := WM_TASKBAREVENT;
//    tnid.hIcon := form1.image2.picture.icon.handle;
    tnid.hIcon := form1.Icon.Handle;
    strcopy(tnid.szTip,'TNA');
    Shell_NotifyIcon(NIM_ADD, @tnid);              
end;

procedure TaskBarRemoveIcon;
var tnid : TNOTIFYICONDATA ;
begin
    tnid.cbSize := sizeof(TNOTIFYICONDATA);
    tnid.Wnd := Form1.handle;
    tnid.uID := 1;
    Shell_NotifyIcon(NIM_DELETE, @tnid);
end;

Chewie 28. Mär 2003 16:07

Da durch den Klick im Popupmenü das aktive Fenster geändert wird, musst du das aktive Fenster ermitteln, bevor du im Popupmenü klickst.
Also z.B. bei WM_MOUSEMOVE über der Position des Popupmenüs.

Alexander 28. Mär 2003 16:58

hi, das dachte ich mir auch schon, doch irgendwie klappt, das nciht. Du meinst das so, oder?
Delphi-Quellcode:
procedure TForm1.WMTASKBAREVENT(var message: TMessage);
var
  point: TPoint;
begin
  case message.LParamLo of
    WM_RBUTTONDOWN:
      begin
        GetCursorPos(point);
        popupmenu1.popup(point.x, point.y);
      end;
    WM_MOUSEMOVE:
     begin
       test := GetForeGroundWindow();
     end;
  end;
end;


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:57 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz