![]() |
Programmsteuerung mit FindWindowEx
Hallo zusammen,
nach dem Studium diverser Beiträge versuche ich mit FindWindow und FindWindowEx in einem fremden Programm einen Button zu finden und später dann auch zu betätigen. Zum testen habe ich ein eigenes Programm (Project1, nur ein Fenster, Form1 mit einem Button, Button1) erstellt und gestartet. Das steuernde Programm findet auch ein Handle zu Form1. Die erste Frage wäre : muß ich mit FindWindow nach 'Form1' oder nach 'Project1' suchen um das Handle zu bestimmen, bei beiden Möglichkeiten bekomme ich ein gültiges Handle (hWindow) zurück. Die zweite Frage wäre : ist der folgende Aufruf ok hButton := FindWindowEx(hWindow, 0, 'TButton', 'Button1'); hier bekomme ich immer nur eine Null. Auch Versuche mit FindWindowExA bzw. die Strings in PCHAR zu wandeln brachetn keinen Erfolg. Allen einen Guten Rutsch ind neue Jahr |
Re: Programmsteuerung mit FindWindowEx
Ein Formular, zwei Schaltflächen:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin ShowMessage('Hello world'); end; procedure TForm1.Button2Click(Sender: TObject); var hWnd: THandle; hBtn: THandle; begin hWnd := FindWindow(nil, 'Form1'); if hWnd <> 0 then begin hBtn := FindWindowEx(hWnd, 0, nil, 'Button1'); if hBtn <> 0 then begin SendMessage(hBtn, BM_CLICK, 0, 0); end else ShowMessage(SysErrorMessage(GetLastError)); end else ShowMessage(SysErrorMessage(GetLastError)); end; |
DP-Maintenance
Dieses Thema wurde von "Daniel" von "Windows 9x / ME / 2000 / XP / 2003" nach "Windows API / MS.NET Framework API" verschoben.
|
Re: Programmsteuerung mit FindWindowEx
.. viele Dank für das Stück Code. Funktioniert auch prima, aber ich muß ein anderes Programm steuern. Hintergrund ist die Auslösung einer Datenaufnahme in einem fertigen Programm (von dem ich nicht die Quellen habe), satt mit einem Button (in eben diesem fertigen Programm) mit eimer zusätzlichen Hardware. Hierfür schreibe ich gerade etwas.
Hat noch jemand eine Idee ? |
Re: Programmsteuerung mit FindWindowEx
|
Re: Programmsteuerung mit FindWindowEx
Zitat:
|
Re: Programmsteuerung mit FindWindowEx
Delphi-Quellcode:
(
function EnumChildProc(Wnd: hWnd; SL: TStrings): BOOL; stdcall;
var szFull: array[0..MAX_PATH] of Char; //Buffer for window caption begin Result := Wnd <> 0; if Result then begin GetWindowText(Wnd, szFull, SizeOf(szFull)); // put window text in buffer if (Pos(SL[0], StrPas(szFull)) > 0) // Test for text and (SL.IndexOfObject(TObject(Wnd)) < 0) // Test for duplicate handles then SL.AddObject(StrPas(szFull), TObject(Wnd)); // Add item to list EnumChildWindows(Wnd, @EnumChildProc, Longint(SL)); //Recurse into child windows end; end; function ClickButton(ParentWindow: Hwnd; ButtonCaption: string): Boolean; var SL: TStringList; H: hWnd; begin SL := TStringList.Create; try SL.AddObject(ButtonCaption, nil); // First item in list is text to find EnumChildWindows(ParentWindow, @EnumChildProc, Longint(SL)); H := 0; case SL.Count of 1: ShowMessage('Window text not found.'); 2: H := hWnd(SL.Objects[1]); else ShowMessage('Ambiguous text detected.'); end; finally SL.Free; end; Result := H <> 0; if Result then PostMessage(H, BM_CLICK, 0, 0); end; ![]() |
Re: Programmsteuerung mit FindWindowEx
.. nochmal Danke. Es läuft jetzt. Ich hatte statt der Caption des
Buttons den Namen vewendet. |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:01 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