Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Delphi Button einer anderen Anwendung drücken (https://www.delphipraxis.net/42504-button-einer-anderen-anwendung-druecken.html)

bugman 19. Mär 2005 22:26


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.

BenjaminH 19. Mär 2005 22:37

Re: Button einer anderen Anwendung drücken
 
Zitat:

Zitat von bugman
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???

Zeig mal deinen Code vom Einsatz von FindWindow
//Edit Lass dir den FindWindow Code doch einfach von WinSpy generieren.

bugman 19. Mär 2005 22:44

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;

KLS 20. Mär 2005 06:18

Re: Button einer anderen Anwendung drücken
 
Zu dieser Problematik, gibt es ein super Tool von Toms. Dieses kannst du HIER finden.

bugman 24. Mär 2005 17:50

Re: Button einer anderen Anwendung drücken
 
Und wie bekome ich den Handle ohne dieses Program raus???????

BenjaminH 24. Mär 2005 17:52

Re: Button einer anderen Anwendung drücken
 
Zitat:

Zitat von bugman
Und wie bekome ich den Handle ohne dieses Program raus???????

Das Prog hat die tolle Funktion FindWindow Code generieren(ich glaub das letzte in der ToolBar)

Gambit 26. Mär 2005 17:58

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:
aHandle:= GetDlgItem(HandleDesFensters,IDDesButtons);
das Handle des Buttoms.

Habe gerade was ganz ähnliches gemacht...

Gruß

Gambit


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:43 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz