Einzelnen Beitrag anzeigen

Dumpfbacke

Registriert seit: 10. Mär 2005
Ort: Mitten in Deutschland
310 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Andere Anwendugn steuen

  Alt 22. Jan 2014, 05:45
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.
Tanja
  Mit Zitat antworten Zitat