![]() |
Klick in Programmbereich Simulieren
Hallo,
ich versuche mich daran ein minimiertes Programm zu steuern. xSpy zeigt mir beim Button namen Nil an, also dachte ich daran in dem Programm einfach auf eine bestimmte X Y Position zu Klicken. Kann mir da jemand helfen? ein Ansatz hierfür wäre echt nett. Das Programm muss allerdings im Hintergrund bleiben Danke |
AW: Klick in Programmbereich Simulieren
Zitat:
|
AW: Klick in Programmbereich Simulieren
Wenn du wirklich konkret einen "Mausklick an Stelle X|Y" simulieren willst kannst du das einfach mit
![]() |
AW: Klick in Programmbereich Simulieren
ich habe das Windows Handle und an dieses Fenster möchte ich an Position X Y einen Klick schicken.
Ist das konkreter? |
AW: Klick in Programmbereich Simulieren
--- vorschnell getippt. Erst denken, dann tippen ---
|
AW: Klick in Programmbereich Simulieren
Sofern es hilft, mir wird von xspy die ControlID angezeigt. Kann ich den Klick zu dieser ControlID senden oder über diese das richtige Handle ermitteln?
|
AW: Klick in Programmbereich Simulieren
ich bekomme zu dem button kein Handle, weder mit WinSpy noch mit xSpy, gibt es irgendeine andere Methode um daran zu kommen?
|
AW: Klick in Programmbereich Simulieren
Wenn der Button kein Handle liefert, ist es kein natives Windows-Control (das Nachrichten empfangen könnte). Was in Folge heißt: Sofern es keine explizite Schnittstelle vom zu steuernden Programm gibt, hast du schlechte Karten es ohne Umweg über die Darstellung zu steuern. Was desweiteren heißt: Ohne sichtbares Fenster und definierte Maus-Koordinaten = sieht schlecht aus für dich.
|
AW: Klick in Programmbereich Simulieren
Um was für ein Programm handelt es sich denn? Und was tut es? Vielleicht kommt man ja auf anderen Weg zum Ziel.
|
AW: Klick in Programmbereich Simulieren
Ist das ein selbst entwickeltes Programm oder ein fremdes?
|
AW: Klick in Programmbereich Simulieren
Es ist ein Waren wirtschafts Programm. Es ist nicht von mir. Es hat ein Tastenfeld inwelchem man die EAN eingeben kann um nach Kommissionierten Artikeln zu suchen. Anstatt nun jede Nummer einzeln einzugeben, wollte ich eine Liste abarbeiten lassen und immer wenn ich auf weiter klicke sollte die nächste Nummer eingegeben und gesucht werden.
Zur Zeit bekomme ich nur das Handle der hauptform und jeder Button welcher sich auf der Form selbst befindet wird mir als TButton angezeigt, ich bekomme einfach kein eindeutiges Handle. Nur die ControlID ist bei jedem Button anders. |
AW: Klick in Programmbereich Simulieren
Es muss nicht zwingend im Hintergrund sein wenn es hilft. Ich habe jetzt mittels Coursor Positionierung und dem Code geschafft das sich was tut, allerdings reagieren einige Buttons trotzdem nicht auf den Klick, wenn ich aber mit der Maus dorthin Klicke dann funktioniert es. Keine Ahnung woran es liegt.
Delphi-Quellcode:
Procedure ClickNow;
var eu: array [0..1] of TInput; begin SetCursorPos(strtoint(form2.ListView1.Selected.SubItems[0]), strtoint(form2.ListView1.Selected.SubItems[1])); ZeroMemory(@eu,sizeof(eu)); eu[0].Itype := INPUT_MOUSE; eu[0].mi.dwFlags :=MOUSEEVENTF_LEFTDOWN; eu[1].Itype := INPUT_MOUSE; eu[1].mi.dwFlags :=MOUSEEVENTF_LEFTUP; SendInput(2,eu[0],sizeof(TInput)); end; |
AW: Klick in Programmbereich Simulieren
Ich habe mal vor vielen Jahren etwas ähnliches gemacht und an eine Anwendung "Tastatur-Ereignisse" geschickt. Hoch, Runter, Tabs und Buchstaben.
Funktioniert hatte das bedingt, aber konkret helfen kann ich Dir leider hier nicht. |
AW: Klick in Programmbereich Simulieren
Die Koordinaten stimmen, gibt es die Möglichkeit einen richtigen Hardware Maus Klick zu simulierten?
|
AW: Klick in Programmbereich Simulieren
oldschool methode von
![]()
Delphi-Quellcode:
// Set the mouse cursor to position x,y:
// Maus an Position x,y setzen: SetCursorPos(x, y); // Simulate the left mouse button down // Linke Maustaste simulieren mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); // Simulate the right mouse button down // Rechte Maustaste simulieren mouse_event(MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0); // Simulate a double click // Einen Doppelklick simulieren mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); GetDoubleClickTime; mouse_event(MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0); mouse_event(MOUSEEVENTF_LEFTUP, 0, 0, 0, 0); // Simulate a double click on a panel // Einen Doppelklick auf einen Panel simulieren SendMessage(Panel1.Handle, WM_LBUTTONDBLCLK, 10, 10); |
AW: Klick in Programmbereich Simulieren
Ich habe jetzt mal eine Maus an den Rechner angeschlossen weil mich der Touch einfach mal total nervt und als ich damit am arbeiten war wurden selbst echte klicks mit der Maus teilweise nicht mehr angenommen?!?
Aber wirklich nur auf manchen Tasten des Nummernblocks auf dem Display, Touch funktionierte bis jetzt ohne jemals Probleme gemacht zu haben. Sehr komisch |
AW: Klick in Programmbereich Simulieren
kann das System zwischen echten Touch auf dem Bildschirm und einem mouse_event via Delphi Tool unterscheiden?
|
AW: Klick in Programmbereich Simulieren
Zitat:
|
AW: Klick in Programmbereich Simulieren
Was das Programm macht hab ich schon beschrieben falls du das meinst.
|
AW: Klick in Programmbereich Simulieren
Das ist ein guter Ansatz! Vielen Dank Frühlingsrolle
|
AW: Klick in Programmbereich Simulieren
Zitat:
@Frühlingsrolle: Super! Danke auch von mir! So etwas suche ich auch gerade. |
AW: Klick in Programmbereich Simulieren
Dort, wo alle WindowsAPIs zu finden sind.
![]() Zuerst in der Windows.pas suchen und wenn nicht, dann kann man noch im $(BDS)-Pfad suchen oder nimmt eine Header-Konvertion von jemand anderem oder kopiert es sich selbst aus der Dokumentation. |
AW: Klick in Programmbereich Simulieren
Die mouse_event() Funktion wurde schon lange durch SendInput() ersetzt.
![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:02 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 by Thomas Breitkreuz