![]() |
EnumProc - EditFeld in externer Software suchen
Hallo,
ich benötige noch einmal eure Hilfe. Ich habe eine Software die in eine im Hintergrund laufende Software etwas in ein Edit Feld eintragen soll. Die Funktion ist gegeben, das Problem ist nur das sich ein Name eines Windows immer beim Neustart der Software einen neuen Namen erhält. Hier mein aktueller Code mit dem ich das Edit finde:
Code:
h:=FindWindow('SAP_FRONTEND_SESSION','SAP 123'); if IsWindow(h) then begin h:=FindWindowEx(h, 0, 'Afx:6FE0000', nil); if IsWindow(h) then begin if IsWindow(h) then begin h:=FindWindowEx(h, 0, 'ComboBox', nil); if IsWindow(h) then begin if IsWindow(h) then begin h:=FindWindowEx(h, 0, 'Edit', nil); if IsWindow(h) then begin Das Problem ist das sich 'Afx:6FE0000' immer neu benennt. Wie kann ich nun nach dem Edit suchen? Ich denke das ich da mit EnumWindowsProc arbeiten kann, stehe hier aber auf dem Schlauch. Vielen Dank. |
AW: EnumProc - EditFeld in externer Software suchen
Du musst Dir zuerst das Handle vom Control besorgen wo Du drauf zugreifen willst. Das geht per Resource Editor oder WindowSpy Tool am einfachsten.
Suche mal hier im Forum nach ![]() |
AW: EnumProc - EditFeld in externer Software suchen
Ich habe mir das alles mit WinSpy geholt.
Dann habe ich in meiner Software Afx:6FE0000, ComboBox und Edit fest eingetragen. Funktioniert dann auch wunderbar. Das Problem ist nur wenn die Software neu gestartet wird, bekommt Afx:6FE0000 einen leicht veränderten Namen zugewiesen. den Handle der eigentliche Software bekomme ich ja schon mit: h:=FindWindow('SAP_FRONTEND_SESSION','SAP 123'); |
AW: EnumProc - EditFeld in externer Software suchen
Ich mache es so:
Copy/Paste das wichtigste aus einem Tool von mir
Delphi-Quellcode:
man braucht ein paar variablen
wh = HWND = ist das haupthandle vom target prozess targetclass und targetcaption = string = gefüllt mit sinnvollem text TARGETEDCONTROL = (D)WORD = ist das window control handle vom target WH := 0; // inititalize this value to 0 if Length(TARGETCLASS) > 0 then WH := FindWindow( TARGETCLASS, NIL ); // feature, search for targets window by CLASSNAME if ((WH = 0) and (Length(TARGETCAPTION) > 0)) then WH := FindWindow( NIL, TARGETCAPTION ); // feature, search for targets window by CAPTION (unsafe) if WH <> 0 then // if we find it, lets copy data into that form begin SendMessage(GetDlgItem(WH, TARGETEDCONTROL), WM_SETTEXT, 0, Integer(PChar('Foobar'))); // send text to target windows edit box end; FindClose(WH); |
AW: EnumProc - EditFeld in externer Software suchen
Da bietet sich
![]() ![]() Damit werden die untergeordneten Controls eines Fensters aufgelistet. In der Callback Funktion kann dann überprüft werden, ob der Klassenname z.B. mit 'Afx:' beginnt. |
AW: EnumProc - EditFeld in externer Software suchen
Liste der Anhänge anzeigen (Anzahl: 2)
Hier ein Beispiel zu meinem genannten Source unter Verwendung des Tools "Spy Window"
Ziel: Daten ermitteln um in WindowsExplorer Fenster die Adress-Zeile manipulieren zu können. Vorgehensweise: Explorer Fenster öffnen und WindowSpy starten. Mit dem Sniper Icon auf die Fenster Caption drag/droppen nun sieht man die Daten aus diesem Bild: Anhang 49709 Was uns an diesem Hinweisen hilft sind "Caption" und "Class" Also notieren wir uns diese und zwar so TARGETCLASS = 'CabinetWClass'; TARGETCAPTION = 'Dieser PC'; Jetzt Snipern wir die Adress-Zeile und erhalten neue Daten, mit einem klick auf General kommt das zum Vorschein: Anhang 49710 Was uns nun interessiert ist die Control ID. Also notieren wir uns diese und zwar so: TARGETEDCONTROL = $3E9; Das ganze als Source zusammengepackt ergibt:
Delphi-Quellcode:
Procedure MachWas();
const TARGETCLASS = 'CabinetWClass'; TARGETCAPTION = 'Dieser PC'; TARGETEDCONTROL = $3E9; TARGETTEXT = 'Foobar'; // <- Das soll dann in Adresszeile stehen var WH: HWND; begin WH := 0; if Length(TARGETCLASS) > 0 then WH := FindWindow( TARGETCLASS, NIL ); if ((WH = 0) and (Length(TARGETCAPTION) > 0)) then WH := FindWindow( NIL, TARGETCAPTION ); if WH <> 0 then begin SendMessage(GetDlgItem(WH, TARGETEDCONTROL), WM_SETTEXT, 0, Integer(PChar(TARGETTEXT))); end; FindClose(WH); end; |
AW: EnumProc - EditFeld in externer Software suchen
Im Titel steht auch schon eine Lösung.
Wenn sich der Name ständig ändert, dann einfach anders danach suchen. Entweder über den ClassName anstatt den WindowTitle (Caption) oder du kannst auch nach Teilnamen suchen, also in ![]() ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:08 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