![]() |
Problem mit Events bei fremder Anwendung
Hallo zusammen,
ich benötige Hilfe in Bezug auf die Verarbeitung oder besser gesagt die Verwendung von Windows Messages. Und zwar habe ich folgendes Problem: An ein fremedes Fenster wird aus meiner Anwendung ein Wert übergeben und je nach Zustand wird dieses Fenster halt minimiert oder in den Vordergrund geholt. Hier mal etwas Code :
Delphi-Quellcode:
In einer anderen Unit verwende ich die Prozeduren, welche die Funktionalität von Hole_Fenster_in_den_Vordergrund abbilden.// Wir senden Text an das Programm SendMessage(h_Edit, WM_SETTEXT, 0, Integer(PChar(objnr))); SendMessage(h_Edit, WM_LBUTTONDOWN, MK_LBUTTON, 0); SendMessage(h_Edit_Klick, WM_LBUTTONUP, MK_LBUTTON, 0); SendMessage(h_Edit_Klick, WM_LBUTTONDOWN, MK_LBUTTON, 0); SendMessage(h_Edit_Klick, WM_LBUTTONUP, MK_LBUTTON, 0); Hole_Fenster_in_den_Vordergrund('xxx.exe');
Delphi-Quellcode:
// Verbesserte Version von SetForeGroundWindow procedure ForceForegroundWindow(hwnd: THandle); // (W) 2001 Daniel Rolf // [url]http://www.finecode.de[/url] // [email]rolf@finecode.de[/email] var hlp: TForm; begin hlp := TForm.Create(nil); try hlp.BorderStyle := bsNone; hlp.SetBounds(0, 0, 1, 1); hlp.FormStyle := fsStayOnTop; hlp.Show; mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_ABSOLUTE or MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); SetForegroundWindow(hwnd); finally hlp.Free; end; end;
Delphi-Quellcode:
Nun mein Problem :// Holt das Fenster in den Vordergrund via SW_Restore oder zeigt es an onTop an procedure Hole_Fenster_in_den_Vordergrund ( Programmname : String); var h_Prog : hwnd; begin // Funktion holt Fenster in den Vordergrund h_Prog := FindWindowByTitle(Programmname); if (h_Prog <> 0) then begin h_Prog := GetWindow(h_Prog, GW_OWNER); // Owner-Handle holen (Handle des TApplication-Fensters) if IsIconic(h_Prog) then ShowWindow(h_Prog, SW_RESTORE); // restoren wenn minimiert // Hauptfenster in den Vordergrund holen ForceForegroundWindow(h_Prog); BringWindowToTop(h_Prog); end; end; Wenn ich das Fenster aus dem IsIconic-Zustand via SW_Restore zurückhole, funktioniert alles tadellos. Ist das Fenster dagegen sichtbar auf dem Desktop, dann wird es angezeigt und ich muss um das Fenster zu minimieren oder beenden, doppelt auf den jeweiligen Button drücken. Welche Windows - Message bzw. Notification benötige ich noch, damit ich zum minimieren oder beenden nur noch einmal den Button drücken muss? Oder liegt das Problem an einer anderen Stelle? Vielen Dank im vorraus für eure Hilfe, Gruß Matthias |
Re: Problem mit Events bei fremder Anwendung
Hallo,
vielleicht liegt es daran, dass Dein Fenster gar nicht wirklich im Vordergrund ist, obwohl die Fensterleiste danach aussieht? Das Problem hatten wir kürzlich ![]() |
Re: Problem mit Events bei fremder Anwendung
Danke schonmal für den Tip.
Wenn ich in den Fenstertitel klicke, dann kann ich das Fenster anschließend minimieren. Eine WM_SETFOCUS UND KILLFOCUS Message scheinen keinen Effekt zu haben oder ich verwende sie falsch. Irgendwelche anderen Ideen? Gruß Matthias |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:14 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz