![]() |
Eingaben eines andern Programms emulieren?
Ich möchte einen Maustastendruck (rechts/links) an ein Spiel/Programm senden, möglichst ohne das sich die Mausposition ändert, ist dies möglich? (WindowsMessages)(auch bei DirectX?)
Im nächsten Schritt sollen auch Tastatureingaben gesendet werden. Im nächsten Schritt sollen Tastatureingaben abgfangen werden. Hat jemand schonmal sowas ähnliches gemacht und einen Ansatzpunkt für mich? Bye |
Re: Eingaben eines andern Programms emulieren?
Vielleicht mit dieser Funktion aus der MSN.
Code:
Würds so versuchen:
VOID mouse_event( DWORD dwFlags,
DWORD dx, DWORD dy, DWORD dwData, ULONG_PTR dwExtraInfo );
Code:
var
x, y: Integer; begin x := Mouse.CursorPos.X; y := Mouse.CursorPos.Y; Mouse_Event(MOUSEEVENTF_LEFTDOWN, x, y, 0, 0); Mouse_Event(MOUSEEVENTF_LEFTUP, x, y, 0, 0); end; |
Re: Eingaben eines andern Programms emulieren?
Ich hab sowas noch nicht gemacht (aber immer dran gedacht...)
Ich glaube, Du musst zunächst ein HANDLE auf die Anwendung kriegen: ![]() Die Maus läßt sich abfragen über:
Delphi-Quellcode:
Position setzen über:
Label1.Caption := IntToStr(Mouse.CursorPos.X);
Label2.Caption := IntToStr(Mouse.CursorPos.Y);
Delphi-Quellcode:
Einen Mausklick simuliert (jedenfalls in der eigenen Anwendung) etwa so:
Mouse.CursorPos := Point(200, 100);
Delphi-Quellcode:
Daher nehme ich an, das man mit dem HANDLE auch eine Sendmessage Botschaft schicken kann.
Button1.Perform(WM_LBUTTONDOWN,0,0);
P.S. ich glaub kaum, das jenes auch über DirectX läuft (dafür ist doch DirectX geschaffen worden, das es schnell geht und der ganze Windows Ballast beiseite gelegt wird) - Aber alles nur Theorie... |
Re: Eingaben eines andern Programms emulieren?
Ok ich erklärs nochmal besser ^^
Wenn dann handelt es sich um eine DirectX Anwendung... Soweit ich weiß, verarbeiten DirectX Anwendungen Eingaben nicht über Windowsmessages... Liege ich da korrekt? 1. Nun is die Frage wie "sende" ich dem nun Eingaben (Tastatur/Maus) ??? Das ich die Maus bewegen kann, die Position abfragen und drücken kann ist mir schon bekannt, aber ev. werden die ja für DirectX - Anwendungen ignoriert, bzw. sind zu langsam, daher suche ich nach mehreren Möglichkeiten! Auch wenn will ich die Maus nicht von X nach Y bewegen, den Knopfdrücken und dann nach X zurückbewegen, denn das würde ja in z.b. Spielen für unschöne Effekte sorgen! 2. Wo Hooke ich solche Eingaben? Gerade wieder im Bezug auf DirectX! Reicht es da, wenn ich die Windowsmessages nehm oder muß ich da wieder ganz anders ansetzen? Und das wichtigste, wie verstecke ich solche Aktionen vor dem Programm? Bye |
Re: Eingaben eines andern Programms emulieren?
@Kedario...: Die Lösung wurde doch schon gepostet (ohne Handle und hat damals auch bei GTA-ViceCity funktioniert)
Zitat:
folgendes ist ineffizient. Zitat:
Du rufst also in dem Fall 2 mal die ApiFunktion GetCursorPos auf (wenn auch indirekt). Besser ist es dann so
Delphi-Quellcode:
oder so (um beim Mouseobject und der Objectorientierung zu bleiben
var LPoint: TPoint;
begin GetCursorPos(LPoint); Label1.Caption := IntToStr(LPoint.X); Label2.Caption := IntToStr(LPoint.Y); end;
Delphi-Quellcode:
[/OT]
var LPoint: TPoint;
begin LPoint := Mouse.CursorPos; Label1.Caption := IntToStr(LPoint.X); Label2.Caption := IntToStr(LPoint.Y); end; |
Re: Eingaben eines andern Programms emulieren?
Ich glaub dir, dass das geht, die Frage ist nur, wie performant die sache ist ^^
Wie gesagt, suche nach vielen Möglichkeiten, wäre ja mal interessant wie das nun wirklich in Spielen gehändelt wird ^^ Auch gehts nicht nur um die Maus, sondern auch um die Tastatur ^^ Bye |
Re: Eingaben eines andern Programms emulieren?
für Tastatureingaben kannst du "keybd_event" verwenden. Auch dafür braucht man kein Handle
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:40 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