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 Fremden Button drücken (https://www.delphipraxis.net/155622-fremden-button-druecken.html)

WizoHulk 1. Nov 2010 11:54

Fremden Button drücken
 
hallo DP's
versuche schon seit geraumer Zeit einen Message zu einer anderen Anwendung zu schiken(realtek HD Audiomanager).
Das Handle habe ich aber irgendwie kann ich die Message nicht rüberschicken.

hier mal mein Code

Delphi-Quellcode:
procedure TForm1.BtnStartClick(Sender: TObject);
var
  LWnd: HWND;
begin
  LWnd := FindWindow('#32770', 'Realtek HD Audio-Manager');

  //LWnd := FindWindowEx(LWnd, 0, '#32770', nil);
  //LWnd := GetDlgItem(LWnd, 65535);
  LWnd := GetDlgItem(LWnd, 1); //Button

  if LWnd <> 0 then
  begin
  sendmessage(LWnd,WM_KEYDOWN,VK_MENU,0);
   //PostKeyExHWND(LWnd, Ord('I'), [ssAlt], False);
  end;
end;

Luckie 1. Nov 2010 12:12

AW: Fremden Button drücken
 
Wie wäre es wenn du einfach die Nachricht BM_CLICK an die Schaltfläche sendest? Davon abgesehen, du sendest zwar die Nachricht WM_KEYDOWN, aber wo lässt du den Button wieder los?

WizoHulk 1. Nov 2010 12:17

AW: Fremden Button drücken
 
boahr, manchmal kann man gar net so dumm denken...
danke schön

WizoHulk 1. Nov 2010 13:02

AW: Fremden Button drücken
 
bei diesem einen button geht es, aber wenn ich das handle vom anderen habe, geht der nicht bei:
Delphi-Quellcode:
LWnd := FindWindowEx(LWnd, 0, '#32770', 'Lautsprecherkonfiguration');
ist das Lwnd auf einmal Null.
Es geht nur bei diesem einen Button...komisch

DeddyH 1. Nov 2010 13:04

AW: Fremden Button drücken
 
Tipp: lad Dir WinSpy herunter und lass das Programm das Handle ermitteln. Das Tool kann Dir auch gleich entsprechenden Quelltext generieren.

WizoHulk 1. Nov 2010 13:09

AW: Fremden Button drücken
 
hab jetzt auch das problem das die vier anzeigen(buttons alle die gleiche controlID haben) und er windowstext auch gleich ist.
ich schätze mal das er deswegen auch nicht weiß wo er drücken soll.
Delphi-Quellcode:
var
  wnd: HWND;
begin
  wnd := FindWindow('#32770', 'Realtek HD Audio-Manager');
  wnd := FindWindowEx(wnd, 0, '#32770', nil);
  wnd := FindWindowEx(wnd, 0, 'Static', 'Lautsprecherausgang');
über x-spy habe ich ja da Handle bekommen...

WizoHulk 1. Nov 2010 13:10

AW: Fremden Button drücken
 
über x-spy habe ich ja da Handle bekommen...

Luckie 1. Nov 2010 13:12

AW: Fremden Button drücken
 
Zitat:

Zitat von WizoHulk (Beitrag 1058935)
hab jetzt auch das problem das die vier anzeigen(buttons alle die gleiche controlID haben) und er windowstext auch gleich ist.

Das kann eigentlich nicht sein, denn irgendwie muss der Programmierer ja die Schaltflächen im Programm auseinander halten.

DeddyH 1. Nov 2010 13:13

AW: Fremden Button drücken
 
Das kommt mir komisch vor. Ist da vielleicht ein FindWindowEx zuviel?

WizoHulk 1. Nov 2010 13:15

AW: Fremden Button drücken
 
ja hmmm. also das Handle ist unterschiedlich seh ich grad
$000E0676 und $002103E8
aber der quellcode greift doch auf die controlID zurück oder nicht?

DeddyH 1. Nov 2010 13:18

AW: Fremden Button drücken
 
Wer hat denn jetzt den Code zum Ermitteln des Handles geschrieben? Du selbst, oder hast Du Dir den generieren lassen?

WizoHulk 1. Nov 2010 13:20

AW: Fremden Button drücken
 
dieser Code stammt bis auf sendMessage...
von x-spy

Delphi-Quellcode:
var
  LWnd: HWND;
begin

  LWnd := FindWindow('#32770', 'Realtek HD Audio-Manager');
  LWnd := FindWindowEx(LWnd, 0, '#32770', nil);
  LWnd := GetDlgItem(LWnd, 65535);

  if LWnd <> 0 then
  begin
    sendmessage(LWnd,BM_CLICK,VK_MENU,0);
  end;
end;
und bei LWnd := GetDlgItem(LWnd, 65535);
setzt er das handle auf null..

DeddyH 1. Nov 2010 13:23

AW: Fremden Button drücken
 
Dann wird das Ding wohl nicht gefunden. Ich habe leider das Realtek-Dingens nicht zur Verfügung, sonst hätte ich mal geschaut, wie man da rankommen könnte.

Luckie 1. Nov 2010 13:37

AW: Fremden Button drücken
 
Das Handle ist immer unterschiedlich, weil es ja von Windows benötigt wird, um die Fenster eindeutig zu identifizieren. Und ein Handle wird bei jedem Programmstart neu vergeben.

DeddyH 1. Nov 2010 13:49

AW: Fremden Button drücken
 
Stimmt. Und? :gruebel:

Luckie 1. Nov 2010 13:52

AW: Fremden Button drücken
 
Ich wollte es nur mal erwähnt haben, da WizoHulk anscheinend die nötigen Hintergrundinformationen fehlen.

DeddyH 1. Nov 2010 13:56

AW: Fremden Button drücken
 
Achso. Mich wundert ja auch, dass er bei einem BM_CLICK ein VK_MENU als wParam übergibt. Sei' s drum, ich an seiner Stelle würde es noch einmal mit WinSpy zusätzlich zu X-Spy probieren, ansonsten könnte man ja mal mit der Keule ran (EnumChildWindows etc.).

WizoHulk 1. Nov 2010 14:50

AW: Fremden Button drücken
 
ich hatte damals mal mit threadid gearbeitet und attach threadinpud.
aber das bringt mir glaub ich auch nicht viel, da er das Handle im GetdlgItem() ja nicht findet


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:33 Uhr.

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