![]() |
FindWindow findet Fenster nicht
Ich suche mit FindWindow ein Fenster, welches auch existiert
(z. B. 'Google - Microsoft Internet Explorer'). FindWindow meldet jedoch, dass er das Fenster nicht findet. Wenn ich mir mit EnumWindows alle Fenstertitel auflisten lassen, wird es aber angezeigt. Wo liegt der Fehler?? |
AW: FindWindow findet Fenster nicht
Schwer zusagen ohne deinen Code.
|
AW: FindWindow findet Fenster nicht
Evtl. Parameter verwechselt oder Leerzeichen im Fenstertitel :glaskugel:?
|
AW: FindWindow findet Fenster nicht
Oder eine falsche Fensterklasse angegeben (nil sollte z.B. gehen)? :glaskugel:
Und was ist denn der Rückgabewert von FindWindow? |
AW: FindWindow findet Fenster nicht
Hier im Forum gibt es ein nützliches Tool namens "WinSpy - der Fensterspion" oder so ähnlich. Damit kannst du Fenster anwählen und bekommst dann den korrekten Klassennamen und Titel angezeigt.
Als kleines Zusatzfeature lässt sich mit dem Programm sogar der passende FindWindow() Code dazu generieren. |
AW: FindWindow findet Fenster nicht
Die meisten Fenster werden gefunden, aber eben einzelne partout nicht.
Weil die Fenstertitel mit Paste/Copy übertragen werden und auch visuell verglichen werden, schließe ich die Variante "Leerzeichen vergessen" aus. WinSpy kann ich auf dem fremden Rechner nicht einsetzen. Scheidet aus. Hier auf Wunsch der Code zum Problem: Fenster auflisten Code:
Delphi-Quellcode:
Fenster abfragen Code:
function EnumWinProc(Wnd: THandle; LParam: LongInt): Boolean; stdcall;
var WinCaption : string; Len: integer; begin Result := True; Len := GetWindowTextLength(Wnd); SetLength(WinCaption, Len); GetWindowText(Wnd, PChar(WinCaption), Len+1); if Trim(WinCaption) <> '' then Form1.Memo2.Lines.Add(Format('%.6x : %s', [Wnd, WinCaption])); end; procedure TForm1.BtnEnumWindowsClick(Sender: TObject); begin Memo2.lines.Clear; EnumWindows(@EnumWinProc, 0); end;
Delphi-Quellcode:
GetLastError war immer 0, deshalb auskommentiert.
procedure TForm1.BtnEnumChildsClick(Sender: TObject);
var hmain, hsub : HWND; ilen : integer; ptext : pChar; fenstername : string; begin Memo2.clear; fenstername := Edit_Fenstername.Text; if fenstername = '' then exit; hmain := FindWindow(nil, PChar(fenstername)); // if hmain = 0 then ShowMessage(inttostr(GetLastError())); if hmain <> 0 then // Fenster vorhanden! ShowMessage('Fenster gefunden: ' + fenstername) else ShowMessage('Fenster NICHT gefunden: ' + fenstername); end; |
AW: FindWindow findet Fenster nicht
IE mit Google ist bei mir in der Liste ....
Delphi-Quellcode:
function EnumWindowsProc1(Wnd: HWND; LB:TListBox): BOOL; stdcall;
const MyMaxName = 255; MyMaxText = 255; var ClassName: String; WindowText: String; begin Result := True; SetLength(ClassName, MyMaxName); SetLength(ClassName,GetClassName(Wnd, PChar(ClassName), MyMaxName)); SetLength(WindowText, MyMaxText); SetLength(WindowText,GetWindowText(Wnd,PChar(WindowText),MyMaxText)); LB.Items.AddObject('[' + ClassName + '] "' + WindowText + '"' + ' Handle: ' + IntToStr(Wnd), Pointer(Wnd)); end; procedure TForm1.Button1Click(Sender: TObject); begin Treeview1.Items.Clear; end; procedure TForm1.Button2Click(Sender: TObject); begin Treeview1.Items.Clear; Listbox1.Items.Clear; Listbox1.Items.BeginUpdate; EnumWindows(@EnumWindowsProc1, Integer(TObject(ListBox1))); Listbox1.Items.EndUpdate; Listbox1.Sorted := true; end; |
AW: FindWindow findet Fenster nicht
Bei mir auch - in der Fensterliste wird es aufgelistet.
Wenn ich aber mit FindWindow das Fenster abfrage wird als Handle "0" zurückgegeben - also nicht gefunden. DAS ist ja das Kuriosum. Merkwürdig ?! |
AW: FindWindow findet Fenster nicht
Ich bin mal so frei und poste dir den von WinSpy generierten Code, welcher auf meinem System (Win7 64 bit) wunderbar funktioniert:
Delphi-Quellcode:
Du hast in deinem Code schlicht und einfach vergessen den Klassennamen (in diesem Falle 'IEFrame') an FindWindow() zu übergeben.
var
wndMain: HWND; begin wndMain := FindWindow('IEFrame','Google - Windows Internet Explorer'); if wndMain <> 0 then begin ShowMessage('Window Handle: ' + IntToStr(wndMain)); end; end; |
AW: FindWindow findet Fenster nicht
Was sagt denn dein Programm wenn du
Delphi-Quellcode:
wndMain := FindWindow(NIL,'Google - Windows Internet Explorer');
abfragst? Bei NIL müsste es das Fenster doch auch finden oder nicht? |
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:28 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