![]() |
Re: Frage zu FindWindow
Hallo Ihr,
denke mal, dass ich das Problem genau so angehen werde. Also nur die sichtbaren Fenster nach Titeln überprüfen und dann gucken, ob mein gewünschtes dabei ist. Danke auf jeden Fall für die ganzen Anregungen!!! Viele Grüße Marco |
Re: Frage zu FindWindow
Ich würde das Thema gerne wieder aufgreifen.
Eine Anwendung bringt einen Text in einem Wordpad Fenster hoch. Ich brauche das handle von diesem Wordpad Fenster - leider kann ich das handle nicht so einfach über den Fensternamen bekommen, da es sich von Fall zu Fall verändert. Allerdings steht am Ende des Fenstertitels immer "WordPad" Kann ich da nicht irgendwie tricksen mit CompareText? Kann ich bei FindWindow('Tralala34 - WordPad') statt dem String eine Funktion hinterlegen welche auf einen Teilstring prüft? |
Re: Frage zu FindWindow
Moin Jaimy,
Zitat:
|
Re: Frage zu FindWindow
Ich habs gelöst. Es gibt da einen tollen download diesbezüglich: ri-soft.de
Da gibts ein Tool mit dem kann ich den Klassennahmen herausfinden kann - damit geht das prima! Grüsse´!" |
Re: Frage zu FindWindow
Moin Jaimy,
Zitat:
Wie eindeutig ist denn der Klassennamen? |
Re: Frage zu FindWindow
Es gibt auch die Möglichkeit bei FindWindow für beide Paramter "nil" zu übergeben und dann mit GetWindow und GW_HWNDNEXT alle Fenster der Ebene durchzugehen.
|
Re: Frage zu FindWindow
Ich hab vor einiger Zeit mal soetwas gebaut, man kann auch jeweils NIL übergeben.
Die Funktion braucht noch einige Hilfsfunktionen, ich packe sie mal mit rein, hoffe das wird nicht zu unübersichtlich und ich vergesse nichts. Die Funktion hat so wie sie da steht den Vorteil, dass sie nicht blockiert, sobald sie auf eine blockierende Anwendung trifft.
Delphi-Quellcode:
{** HandleListe aller Fenster} function getWindowList: TList; type pList= ^TList; function enumWindowsProc (hWnd: integer; bla: pointer): BOOL; stdcall; begin pList(bla)^.Add( pointer( hWnd)); result:= true; end; begin result:= TList.create; Result.Capacity := 40; enumWindows( @enumWindowsProc, integer(@result)); Result.Capacity := Result.count; end; {** Gibt die Caption eines Fensters zurück.} function vGetWindowTextTimeOut(const h:integer; const timeOut: integer):string; var dw: dword; begin setLength(result, 256); sendMessageTimeOut(h, WM_GETTEXT, 256, integer(pchar(result)), SMTO_ABORTIFHUNG, timeOut, dw); setLength(result, strlen( pchar( result))); end; {** Gibt den Klassennamen eines Fensters zurück.} function vGetClassName(const h:integer):string; begin setLength(result, 100); getClassName(h, pchar(result), 100); setLength(result, strlen( pchar( result))); end; function vFindWindow(const Klasse, Name: pchar; const usePos, mustBeVisible: Boolean): integer; var handle, wdh: integer; WindowList: TList; begin result:= 0; WindowList:= getWindowList; if not usePos then begin for wdh:= 0 to WindowList.count -1 do begin handle:= integer( WindowList[ wdh]); if ((Klasse=NIL) or (vgetClassName( handle) = Klasse)) and ((Name= NIL) or (vGetWindowTextTimeOut( handle, 250) = Name)) then begin if not mustBeVisible or isWindowVisible(handle) then begin result:= handle; break; end; end; end; end else begin for wdh:= 0 to WindowList.count -1 do begin handle:= integer( WindowList[ wdh]); if ((Klasse=NIL) or (pos(Klasse, vgetClassName( handle))>0)) and ((Name=NIL) or (pos(Name, vGetWindowTextTimeout( handle, 250))>0)) then begin if not mustBeVisible or isWindowVisible(handle) then begin result:= handle; break; end; end; end; end; WindowList.free; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:42 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