Laden...

Simulierter Mausklick funktioniert nicht im externen Programm

Erstellt von AlexejSimon vor 4 Jahren Letzter Beitrag vor 4 Jahren 1.085 Views
A
AlexejSimon Themenstarter:in
9 Beiträge seit 2019
vor 4 Jahren
Simulierter Mausklick funktioniert nicht im externen Programm

Hallo Leute,

bei der Suche nach einer Lösung für mein Problem bin ich bisher nicht fündig geworden. Es gibt ähnliche Probleme aber nichts passendes zu meinem.

Und zwar versuche ich schon seit Tagen einen simulierten Mausklick auf einen Button in einem externen Programm das nicht von mir erstellt wurde zu tätigen.
Aber nichts scheint zu funktionieren.
Folgende Sachen habe ich bereits getestet:
Autoit,
SendInput (pinvoke)
mouse_event (pinvoke)
InputSimulator

All diese Versuche haben auf anderen Anwendungen wie zum Beispiel "Rechner" einwandfrei funktioniert.
Der Mausklick auf diese eine Anwendung will einfach nicht erkannt werden.

Hatte jemand von euch vielleicht auch schon mal so ein Problem?

Vielen Dank vorab.

4.931 Beiträge seit 2008
vor 4 Jahren

Um was für ein Programm handelt es sich denn?
Deine bisher verwendeten Funktionen funktionieren nur, wenn die Windows Message Queue von dem Programm benutzt wird (das es anscheinend nicht benutzt), und nicht wenn z.B. DirectInput verwendet wird.

A
AlexejSimon Themenstarter:in
9 Beiträge seit 2019
vor 4 Jahren

Hi,
vielen Dank für die schnelle Antwort.
Das ist ein Produktionssteuerungsprogramm mit MES bei uns im Unternehmenund heißt auf dem Desktop Operator Workstation.
Ich hab mir auch schon so etwas in der Richtung gedacht. Konnte aber bisher keine andere Methode finden, die es schafft den Mausklick auszuführen.
Hast du vielleicht eine Idee, wie man einen DirektInput simuliert?

A
AlexejSimon Themenstarter:in
9 Beiträge seit 2019
vor 4 Jahren

Ich habe eben die IT-Abteilung dazu befragt. Die Anwendungen laufen alle direkt auf dem Rechner und sind nicht virtuell. Der Server jedoch ist Virtuell.
Das alles wurde mit dem VAC NT/32 - Entwicklungsstudio programmiert.

4.931 Beiträge seit 2008
vor 4 Jahren

Sorry, da weiß ich auch nicht weiter.

Du könntest evtl. noch mit "WinSpy" o.ä. schauen, ob das Programm intern überhaupt Windows-Controls verwendest (und damit die Windows-Nachrichtenverarbeitung).

A
AlexejSimon Themenstarter:in
9 Beiträge seit 2019
vor 4 Jahren

Folgende Infos bekomme ich über den Button. Sieht nicht nach einem Windows-Controll aus.

>>>> Control <<<<

Class:    Button

Instance:             6

ClassnameNN:  Button6

Name: 

Advanced (Class):            [CLASS:Button; INSTANCE:6]

ID:          1020

Text:    

Position:              230, 4

Size:      30, 30

ControlClick Coords:       18, 16

Style:    0x5403000B

ExStyle: 0x00000000

Handle: 0x00000000000212C4
4.931 Beiträge seit 2008
vor 4 Jahren

Doch, das ist ein Windows-Control (sonst würdest du gar keine Infos darüber erhalten).

Du könntest mal probieren, direkt eine Button-Click Nachricht an dieses Handle zu verschicken, s. z.B. Clicking a Button in Another Application.

Und zum Test als Button-Handle sowie Button-ID direkt die ausgelesenen Werte benutzen:


int ButtonId = 1020;
IntPtr hWndButton = new IntPtr(0x00000000000212C4);

int wParam = (BN_CLICKED << 16) | (ButtonId & 0xffff);
SendMessage(handle, WM_COMMAND, wParam, hWndButton);

Oder eben gleich


IntPtr hWndButton = GetDlgItem(handle, ButtonId);

(Teste aber dann mal den Rückgabewert, ob dies der gleiche ist).