Hallo Leute,
ich möchte genre einen andere Anwendung aus Delphi heraus steuern. Bei einem Programm funktioniert es ganz gut. Ich besorge mir die Daten mittels WinSpy und schreibe dann Werte in ein Textfeld.
Beispiel hier hat jedes Feld seine eigene Nummer. Hier ist es z.B. das 9. Edit Feld.
Delphi-Quellcode:
function FindWindowEx2(hParent: HWND; ChildClassName:
string; ChildNr: Word): HWND;
var
i: Word;
hChild: HWND;
begin
hChild := 0;
Result := 0;
Dec(ChildNr);
for i := 0
to ChildNr
do
begin
hChild := FindWindowEx(hParent, hChild, PChar(ChildClassName),
nil);
if hChild = 0
then
Break;
Result := hChild;
end;
end;
var
wndMain, wndChild: HWND;
begin
wndMain := FindWindow('
IEFWINDOW','
Stuecklisten bearbeiten');
if wndMain <> 0
then
begin
wndChild := FindWindowEx(wndMain, 0, '
IEFWINDOW',
nil);
wndChild := FindWindowEx2(wndChild,'
Edit', 9);
if wndChild <> 0
then
begin
ShowMessage('
Window Handle: ' + IntToStr(wndChild));
FlashControl(wndChild);
// internal function
end;
end;
end.
Das ganze wollte ich nun bei einen anderenProgramm machen nur da funktioniert es beim besten willen nicht da die einzelnen Edit Felder kein "eigenen Zahl" haben,
Es handel sich beim Programm um BMC Remedy. Dort kann man zwar vieles mittels Macros machenm jedoch nicht alles. Zur not muss ich hat die Maus steuern und in das Feld klicken, was ich auch schon gemacht habe, jedoch wäre der andere Weg mir lieber uns sicherer.
Kann mir jemand hier helpgen ?
Tanja
Delphi-Quellcode:
function FindWindowEx2(hParent: HWND; ChildClassName:
string; ChildNr: Word): HWND;
var
i: Word;
hChild: HWND;
begin
hChild := 0;
Result := 0;
Dec(ChildNr);
for i := 0
to ChildNr
do
begin
hChild := FindWindowEx(hParent, hChild, PChar(ChildClassName),
nil);
if hChild = 0
then
Break;
Result := hChild;
end;
end;
var
wndMain, wndChild: HWND;
begin
wndMain := FindWindow('
ArFrame',******'
);
if wndMain <> 0 then
begin
wndChild := FindWindowEx(wndMain, 0, 'MDIClient'
, nil);
wndChild := FindWindowEx(wndChild, 0, 'Afx:00400000:b:00000000:00000006:1E4209F1'
, nil);
wndChild := FindWindowEx(wndChild, 0, 'AfxMDIFrame70'
, nil);
wndChild := FindWindowEx(wndChild, 0, 'AfxFrameOrView70'
, nil);
wndChild := FindWindowEx2(wndChild,'SysTabControl32'
, 3);
wndChild := FindWindowEx2(wndChild,'AfxWnd70'
, 12);
wndChild := FindWindowEx(wndChild, 0, 'RichEdit20A'
, nil);
if wndChild <> 0 then
begin
ShowMessage('Window
Handle: '
+ IntToStr(wndChild));
SetWinText(wndChild, 'Ja'
);
FlashControl(wndChild); // internal function
end;
end;
end.