Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   FindWindow findet Fenster nicht (https://www.delphipraxis.net/168008-findwindow-findet-fenster-nicht.html)

dusty 30. Apr 2012 10:00

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??

Luckie 30. Apr 2012 10:16

AW: FindWindow findet Fenster nicht
 
Schwer zusagen ohne deinen Code.

DeddyH 30. Apr 2012 11:33

AW: FindWindow findet Fenster nicht
 
Evtl. Parameter verwechselt oder Leerzeichen im Fenstertitel :glaskugel:?

jaenicke 30. Apr 2012 11:44

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?

Zacherl 30. Apr 2012 11:56

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.

dusty 1. Mai 2012 09:24

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:
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;
Fenster abfragen Code:

Delphi-Quellcode:
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;
GetLastError war immer 0, deshalb auskommentiert.

Bummi 1. Mai 2012 10:22

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;

dusty 1. Mai 2012 10:58

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 ?!

Zacherl 1. Mai 2012 11:08

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:
var
  wndMain: HWND;
begin
  wndMain := FindWindow('IEFrame','Google - Windows Internet Explorer');
  if wndMain <> 0 then
  begin
     ShowMessage('Window Handle: ' + IntToStr(wndMain));
  end;
end;
Du hast in deinem Code schlicht und einfach vergessen den Klassennamen (in diesem Falle 'IEFrame') an FindWindow() zu übergeben.

dusty 1. Mai 2012 11:16

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 01:08 Uhr.
Seite 1 von 2  1 2      

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