AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Button in einer Anwendung drücken.

Ein Thema von IMPEGA · begonnen am 30. Apr 2015 · letzter Beitrag vom 1. Mai 2015
Antwort Antwort
Seite 1 von 2  1 2   
IMPEGA

Registriert seit: 19. Jan 2008
Ort: Brhv
73 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#1

Button in einer Anwendung drücken.

  Alt 30. Apr 2015, 11:39
Hi
Ich schon wieder mit einer Frage.
Ich versuche ein "Play" Button in einer Anwendung (Wahrscheinlich Java) zu drücken.
Fragt mich bitte nicht wozu man es braucht, es ist für einen Kumpel.
Es handelt sich um "SDRSharp" (Download hier: http://sdrsharp.com/#download)

In der Anwendung möchte ich einfach nur das Play drücken.
Bild: http://www.xup.in/dl,19032894/SDR.JPG/

Meine Versuche sind leider gescheitert.
Hier habe ich die Class mit WinSpy ausgelesen und so getestet.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  wndMain, wndChild: HWND;
  i : Word;
begin
  wndMain := FindWindow('WindowsForms10.Window.8.app.0.2004eee','SDR# v1.0.0.1337 - IQ Imbalance: Gain = 1,000 Phase = 0,000°');
  if wndMain <> 0 then
  begin
    wndChild := FindWindowEx(wndMain, 0, 'WindowsForms10.BUTTON.app.0.2004eee', nil); (*Das Button OK bestimmen.*)
    PostMessage(199070, WM_KEYDOWN, VK_RETURN, 0); (*Drücke auf das Button OK.*)
  end;
end;
Leider wird mein Button nicht gefunden.
Dann habe ich versucht die ganzen HWND zu erfassen um zu testen ob mein Button vorhanden ist.
Scheinbar ja, scheinbar ist die Class auch richtig aber es passiert nichts.
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.Button2Click(Sender: TObject);
var
  wndMain, wndChild, Jogi: HWND;
begin
  wndMain := FindWindow('WindowsForms10.Window.8.app.0.2004eee','SDR# v1.0.0.1337 - IQ Imbalance: Gain = 1,000 Phase = 0,000°');
  if wndMain <> 0 then
  begin
    wndChild := FindWindowEx2(wndMain,'WindowsForms10.Window.8.app.0.2004eee', 5); //Damit habe ich versucht die Gruppe zu erfassen.
      if wndChild <> 0 then
        begin
           Jogi := FindWindowEx2(wndChild,'WindowsForms10.BUTTON.app.0.2004eee', 5); //Das sollte eigentlich mein Button sein
           ShowMessage('Window Handle: ' + IntToStr(Jogi)); //Nur ein Test ob die HWND stimmt
           PostMessage(Jogi, WM_KEYDOWN, VK_RETURN, 0); //Drücke Play
        end;
  end;
end;
Ich komme nun nicht weiter.
Das Ganze habe ich schon aufgegeben, meine Neugier aber hat mich zu der Frage bewegt.
Ist es überhaupt in diesem Fall machbar?
Vorschläge?
  Mit Zitat antworten Zitat
Dejan Vu
(Gast)

n/a Beiträge
 
#2

AW: Button in einer Anwendung drücken.

  Alt 30. Apr 2015, 16:06
Findet er denn alle controls?
  Mit Zitat antworten Zitat
IMPEGA

Registriert seit: 19. Jan 2008
Ort: Brhv
73 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#3

AW: Button in einer Anwendung drücken.

  Alt 30. Apr 2015, 17:05
Nein, das ist das Problem. Er sieht die Gruppe als eins.
Das hier
Zitat:
WindowsForms10.BUTTON.app.0.2004eee
Zumindest zeigt er nur eine Message.
Es sind aber mehrere Buttons vorhanden.

EDIT:
Falls Jemand sich die Mühe machen sollte. Das Programm ist kostenlos und man kann es in Sandbox installieren. Danach auch portabel benutzen.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Button in einer Anwendung drücken.

  Alt 30. Apr 2015, 18:52
Davon abgesehen wäre BM_CLICK die passende Nachricht an die Schaltfläche,
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
IMPEGA

Registriert seit: 19. Jan 2008
Ort: Brhv
73 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#5

AW: Button in einer Anwendung drücken.

  Alt 30. Apr 2015, 19:29
Leider löst es aber mein Problem nicht.
Eine kurze Erklärung warum BM_CLICK besser ist wäre sehr nett.
  Mit Zitat antworten Zitat
Benutzerbild von himitsu
himitsu

Registriert seit: 11. Okt 2003
Ort: Elbflorenz
39.684 Beiträge
 
Delphi 11 Alexandria
 
#6

AW: Button in einer Anwendung drücken.

  Alt 30. Apr 2015, 19:51
Weil das der offizielle Befehl ist, um einen Button zu drücken?

Und wenn es auf der Form einen "Default"-Button gibt, dann reagiert der auf Enter, und nicht der, an welchen man das [Enter] geschickt hat.
Tipp: TButton.Default und TButton.Cancel
Garbage Collector ... Delphianer erzeugen keinen Müll, also brauchen sie auch keinen Müllsucher.
Delphi-Tage 2005-2014
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#7

AW: Button in einer Anwendung drücken.

  Alt 30. Apr 2015, 20:54
Die Konstante ist eigentlich selbsterklärend. BM: Button Message. Click: Klicken. Und das willst du ja oder?

Nimm dir doch mal eins der vielen Tools und ermittele die ID des Buttons. Damit solltest du auch das Handle bekommen.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: Button in einer Anwendung drücken.

  Alt 30. Apr 2015, 20:56
EnumChildWindows wäre auch noch eine Idee. Da die Fenster wohl etwas verschachtelt sind.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
IMPEGA

Registriert seit: 19. Jan 2008
Ort: Brhv
73 Beiträge
 
Delphi 10.2 Tokyo Professional
 
#9

AW: Button in einer Anwendung drücken.

  Alt 30. Apr 2015, 21:29
Ja BM ist schon gut.
Ich habe es so weit dass wenn ich die Class Nr. direkt angebe klicke ich meinen Button.
SendMessage(1180958, BM_CLICK, 0, 0); // Das funktioniert Morgen versuche ich noch die Nummer automatisch zu erfassen.

Bitte um Verständnis ich bin aber nur ein Anfänger.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie
(Moderator)

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#10

AW: Button in einer Anwendung drücken.

  Alt 30. Apr 2015, 21:50
Das ist nicht die Class ID. Das ist das Handle! Und das ändert sich bei jedem Start der Anwendung.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2   

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 04:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2022, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf