AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Button einer anderen Anwendung drücken
Thema durchsuchen
Ansicht
Themen-Optionen

Button einer anderen Anwendung drücken

Ein Thema von bugman · begonnen am 19. Mär 2005 · letzter Beitrag vom 26. Mär 2005
Antwort Antwort
bugman

Registriert seit: 21. Jan 2005
10 Beiträge
 
#1

Button einer anderen Anwendung drücken

  Alt 19. Mär 2005, 23:26
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.
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#2

Re: Button einer anderen Anwendung drücken

  Alt 19. Mär 2005, 23:37
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.
Benjamin
  Mit Zitat antworten Zitat
bugman

Registriert seit: 21. Jan 2005
10 Beiträge
 
#3

Re: Button einer anderen Anwendung drücken

  Alt 19. Mär 2005, 23:44
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;
  Mit Zitat antworten Zitat
KLS

Registriert seit: 20. Jun 2004
Ort: Berlin
89 Beiträge
 
Delphi 7 Enterprise
 
#4

Re: Button einer anderen Anwendung drücken

  Alt 20. Mär 2005, 07:18
Zu dieser Problematik, gibt es ein super Tool von Toms. Dieses kannst du HIER finden.
Thomas H.
  Mit Zitat antworten Zitat
bugman

Registriert seit: 21. Jan 2005
10 Beiträge
 
#5

Re: Button einer anderen Anwendung drücken

  Alt 24. Mär 2005, 18:50
Und wie bekome ich den Handle ohne dieses Program raus???????
  Mit Zitat antworten Zitat
BenjaminH

Registriert seit: 14. Okt 2004
Ort: Freiburg im Breisgau
713 Beiträge
 
Turbo Delphi für Win32
 
#6

Re: Button einer anderen Anwendung drücken

  Alt 24. Mär 2005, 18:52
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)
Benjamin
  Mit Zitat antworten Zitat
Gambit

Registriert seit: 28. Mai 2003
680 Beiträge
 
Delphi 7 Professional
 
#7

Re: Button einer anderen Anwendung drücken

  Alt 26. Mär 2005, 18:58
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

aHandle:= GetDlgItem(HandleDesFensters,IDDesButtons); das Handle des Buttoms.

Habe gerade was ganz ähnliches gemacht...

Gruß

Gambit
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 06:55 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