![]() |
Button einer anderen Anwendung drücken
Hallo,
hier ein schon öfters behandeltes Thema. Aber ich bekomm es einfach nicht hin. Ich möchte mit Delphi den Button in einer Fremden Applikation drücken. Zur Zeit bekomme ich es hin, den Button zu drücken, wenn ich den Handle der Form der fremden Anwendung eingebe (die bekomme ich über das Programm WinDowse). Wenn ich jedoch über findWindow den Handle versuche heraus zu bekomen, erhalte ich nur den Handle von TApllication und nicht von TForm. Wie komm ich an den dran??? Ich verzeifel hier schon seit Stunden. |
Re: Button einer anderen Anwendung drücken
Zitat:
//Edit Lass dir den FindWindow Code doch einfach von ![]() |
Re: Button einer anderen Anwendung drücken
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; procedure TForm2.Button1Click(Sender: TObject); var hwindow,hform,test:hwnd; begin // hwindow:=findWindow(nil,'Project1'); // hform:=findWindowEx(hwindow,0,'TForm1',nil); //hier ist der Fehler das dort oben funktioniert nicht und einfach mit dem Handle eingetragen klappt's ClickButton(1442682,'Button1'); end; |
Re: Button einer anderen Anwendung drücken
Zu dieser Problematik, gibt es ein super Tool von Toms. Dieses kannst du
![]() |
Re: Button einer anderen Anwendung drücken
Und wie bekome ich den Handle ohne dieses Program raus???????
|
Re: Button einer anderen Anwendung drücken
Zitat:
|
Re: Button einer anderen Anwendung drücken
Hi,
ich kenne dieses WinDowse nicht. Zeigt dir das auch die ID des Buttons an? Ansonsten kannst du die ID über WinSpy leicht rauskriegen mit der Option "Unter der Maus". Wenn du das Handle des Fensters welches den Button besitzt hast und die ID des Buttons bekommst du mit
Delphi-Quellcode:
das Handle des Buttoms.
aHandle:= GetDlgItem(HandleDesFensters,IDDesButtons);
Habe gerade was ganz ähnliches gemacht... Gruß Gambit |
Alle Zeitangaben in WEZ +1. Es ist jetzt 14:18 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