AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Win32/Win64 API (native code) Delphi Buttonklick in anderer Anwendung simulieren
Thema durchsuchen
Ansicht
Themen-Optionen

Buttonklick in anderer Anwendung simulieren

Ein Thema von Tim-94 · begonnen am 13. Aug 2009 · letzter Beitrag vom 13. Aug 2009
Antwort Antwort
Benutzerbild von Tim-94
Tim-94

Registriert seit: 3. Jul 2008
Ort: Hamburg
132 Beiträge
 
Delphi 10.3 Rio
 
#1

Buttonklick in anderer Anwendung simulieren

  Alt 13. Aug 2009, 15:27
Hi,
Ich habe eine "eigentlich" einfachere Frage.
Und zwar möchte ich auf einen Button in einer anderen Anwendung (iTunes) klicken.
Das Handle bekomme ich schon durch die Hilfe von WinSpy heraus.
Ich habe schon viel in Google und hier im Forum gesucht, das Thema wird öfters angesprochen und angeblich auch gelöst, aber leider haben diese Dinge in meinem Programm nie funktioniert.

Hier mein bisheriger Code (mit Hilfe von WinSpy):

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;

procedure TForm1.PlayPauseButtonClick(Sender: TObject);
var
  wndMain, wndChild: HWND;
begin
  wndMain := FindWindow('iTunes','iTunes');
  if wndMain <> 0 then
  begin
    wndChild := FindWindowEx2(wndMain,'Button', 6);
    if wndChild <> 0 then
    begin
      SendMessage(wndChild, bm_Click,0,0);
    end;
  end;
end;
Vielen Dank im Vorraus
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: Buttonklick in anderer Anwendung simulieren

  Alt 13. Aug 2009, 17:20
Erstmal sollte die Message 'WM_Click' heißen und nicht 'bm_Click', denke ich. Und zum zweiten könnte es sein, das dem Control as am A* vorbei geht, weil es sich vielleicht gar nicht um einen Buttoni handelt, sondern um irgendeine Skin-Komponente.

Das sind natürlich nur Vermutungen, weil ich kein iTunes habe.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Tim-94
Tim-94

Registriert seit: 3. Jul 2008
Ort: Hamburg
132 Beiträge
 
Delphi 10.3 Rio
 
#3

Re: Buttonklick in anderer Anwendung simulieren

  Alt 13. Aug 2009, 17:33
Aso, also könnte es sein, dass WinSpy dieses Objekt vielleicht nur fälschlicherweise als TButton erkennt.
  Mit Zitat antworten Zitat
Benutzerbild von Tim-94
Tim-94

Registriert seit: 3. Jul 2008
Ort: Hamburg
132 Beiträge
 
Delphi 10.3 Rio
 
#4

Re: Buttonklick in anderer Anwendung simulieren

  Alt 13. Aug 2009, 17:35
Wenn ich die Eingenschaft auf wm_click ändere, spuckt Delphi die Fehlermeldung aus, dass der Bezeichner undefiniert ist.
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#5

Re: Buttonklick in anderer Anwendung simulieren

  Alt 13. Aug 2009, 17:41
Nee, vermutlich nicht.

Hier wird beschrieben, wie man iTunes per COM steuern kann. Vielleicht lässt sich dein Problem damit lösen?

WM_Click: Ich bin auch zu blöd und sollte das nächste Mal vorher nachschauen, bevor ich hier irgendwen verbessere. Entschuldigung.

Laut Delphi-Code kann man einem TButton eine CN_Command-Message schicken, wobei dann in lparam oder wParam der Wert 'BN_CLICKED' stehen muss.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Benutzerbild von Tim-94
Tim-94

Registriert seit: 3. Jul 2008
Ort: Hamburg
132 Beiträge
 
Delphi 10.3 Rio
 
#6

Re: Buttonklick in anderer Anwendung simulieren

  Alt 13. Aug 2009, 18:06
Ja du hattest recht, ich habe meine Prozedur:

SendMessage(Handle, BM_Click, 0, 0); mit dem Windows Taschenrechner ausprobiert und dort funktioniert es.
Also ist der Button in iTunes kein "echter" Button.

Das Problem liegt also bei WinSpy: Falsche Objektklassenerkennung!
  Mit Zitat antworten Zitat
mkinzler
(Moderator)

Registriert seit: 9. Dez 2005
Ort: Heilbronn
39.851 Beiträge
 
Delphi 11 Alexandria
 
#7

Re: Buttonklick in anderer Anwendung simulieren

  Alt 13. Aug 2009, 18:08
Zitat:
Also ist der Button in iTunes kein "echter" Button.
iTunes scheint mir im Allgemeinen keine "echte" Windows-Oberfläche zu haben.
Markus Kinzler
  Mit Zitat antworten Zitat
Benutzerbild von toms
toms
(CodeLib-Manager)

Registriert seit: 10. Jun 2002
4.648 Beiträge
 
Delphi XE Professional
 
#8

Re: Buttonklick in anderer Anwendung simulieren

  Alt 13. Aug 2009, 18:17
Zitat von Tim-94:
Das Problem liegt also bei WinSpy: Falsche Objektklassenerkennung!
Das stimmt nicht. Wenn der Klassenname falsch wäre, würde der Button nicht gefunden werden. Wird er aber.

Ich habe hier eine andere Möglichkeit gezeigt, um den Button anzusteuern.
Thomas
  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 09:16 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