![]() |
Ist ein bestimmtes Fenster geöffnet?
Ich habe wieder einmal ein Problem. Mein Programm soll herausfinden, ob ein bestimmtes Fenster geöffnet ist. Es handelt sich dabei um ein Fenster mit der Titelleiste 'BISS: Fehlermeldung'. Das funktioniert gut. Sobald das Fenster gefunden wird, erscheint eine Meldung 'FEHLER'.
Das geschieht in der Callback-Funktion zu EnumChildWindows. So weit so gut. Jetzt will ich, dass die Funktion FBissFehlermeldung true zurückgibt, wenn das besagte Fenster erschienen ist. Wie erfährt FBissFehlermeldung jetzt, dass FEnumChilds das Fenster gefunden hat? Ich nehme an, dass ich eine Variable brauche, die beide Funktionen benutzen können und die ich setze, wenn das Fenster gefunden wurde, statt die Nachricht auszugeben. Aber ich habe keine Möglichkeit gefunden wie beide Funktionen auf dieselbe Variable zugreifen können. Hier ist mein bisheriger Quellcode.
Delphi-Quellcode:
Ich hoffe, es ist angekommen, was ich meine.
function TFrmMain.FBissFehlermeldung: Boolean;
function FEnumChilds(hchild: HWND; lParameter: lparam): boolean; stdcall; var StrTitelleiste: String; pText: pChar; IntTextLaenge: Integer; begin Result := true; IntTextLaenge := SendMessage(hCHild, WM_GETTEXTLENGTH, 0,0 ); GetMem(pText, IntTextLaenge + 1); SendMessage(hChild, WM_GETTEXT, IntTextLaenge + 1, Integer(pText)); if pos('BISS+: Fehlermeldung', pText) <> 0 then begin Showmessage('Fehler'); end; FreeMem(pText); end; var hWindow: HWND; begin hWindow := Application.Handle; while hWindow <> 0 do begin hWindow := GetNextWindow(hWindow, GW_HWNDNEXT); EnumChildWindows(hWindow, @FEnumChilds, integer(self)); end; end; |
Re: Ist ein bestimmtes Fenster geöffnet?
Delphi-Quellcode:
siehe // ....
function TFrmMain.FBissFehlermeldung: Boolean;
Var R:Boolean; // Variable für Rückgabe hWindow: HWND; function FEnumChilds(hchild: HWND; lParameter: lparam): boolean; stdcall; var StrTitelleiste: String; pText: pChar; IntTextLaenge: Integer; begin Result := true; IntTextLaenge := SendMessage(hCHild, WM_GETTEXTLENGTH, 0,0 ); GetMem(pText, IntTextLaenge + 1); SendMessage(hChild, WM_GETTEXT, IntTextLaenge + 1, Integer(pText)); if pos('BISS+: Fehlermeldung', pText) <> 0 then begin R:=true; //fenster gefunden end; FreeMem(pText); end; begin hWindow := Application.Handle; R:=False; // initialisierung while hWindow <> 0 do begin hWindow := GetNextWindow(hWindow, GW_HWNDNEXT); EnumChildWindows(hWindow, @FEnumChilds, integer(self)); end; result:=R; // rückgabe end; aber wenn der Fenster-Titel nur 'BISS+: Fehlermeldung' ist kannst du das auch mit
Delphi-Quellcode:
statt der riesen Function bewerkstelligen
if FindWindow(nil,'BISS+: Fehlermeldung')<>0 Then // ... Fenster gefunden
|
Re: Ist ein bestimmtes Fenster geöffnet?
Vielen Dank. Auf die einfache Lösung hätte ich auch kommen können ;)
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:43 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