Hallo Zusammen,
ich versuche gerade auf ein anderes Programm zuzugreifen und habe da meine Schwierigkeiten...
Delphi-Quellcode:
var
fwnd: THandle;
wnd: HWND;
wnd_edit: HWND;
CName: array [0..255] of Char;
begin
fwnd := FindWindow(nil, 'Das andere Programm');
GetClassName(fWND, CName, 256);
wnd := FindWindowEx(wnd, 0, CName, nil);
wnd := FindWindowEx(wnd, 0, CName, nil);
wnd := FindWindowEx(wnd, 0, CName, nil);
wnd := FindWindowEx(wnd, 0, CName, 'Empfänger'); //Bis hierhin passt es. Der ClassName der App ist 'WindowsForms10.Window.8.app.0.141b42a_r6_ad1'
wnd_edit := FindControlByNumber(wnd, 'WindowsForms10.EDIT.app.0.141b42a_r6_ad1', 1); //Wenn ich jetzt aber auf das Edit zugreifen möchte, muss ich den ClassName ändern
if wnd_edit<>0 then SendMessage(wnd_edit,WM_SETTEXT,0,Integer(Pchar(Edit_HausNr.Text))); //Wenn ich das händisch mach geht das.
//wnd_edit:= FindControlByNumber(FindWindow(CName, nil),'Edit', 1) ///Das klappt nicht, dann wird wnd_edit=0
end;
Das Problem ist, dass ich das Edit mit der ControllNr finde:
Delphi-Quellcode:
function TTMSForm2.FindControlByNumber(hApp: HWND; ClassName:
string; ControlNr: Word = 1): HWND;
var
i: Word;
hControl: HWND;
begin
Result := 0;
if IsWindow(hApp)
then
begin
Dec(ControlNr);
hControl := 0;
for i := 0
to ControlNr
do
begin
hControl := FindWindowEx(hApp, hControl, PChar(ClassName),
nil);
if hControl = 0
then
Exit;
end;
end;
Result := hControl;
end;
Dafür brauche ich den ClassName. Der ändert sich aber:
Von der App : WindowsForms10.Window.8.app.0.141b42a_r6_ad1
Von dem Edit : WindowsForms10.EDIT.app.0.141b42a_r6_ad1
Ich glaube nicht, dass es sinnvoll ist, den ClassName "händisch" zu ändern. Wenn die App auf einem anderen Rechner läuft, wird es nicht mehr klappen.
Kann mir jemand einen Tip geben, wie ich das hinbekomme?
Vielen Dank
Patrick