![]() |
DirectInput: GetDeviceData Hook
Hey,
ich versuche ein paar kleine Tastatureingaben in ein Programm einzuschmuggeln, welches DirectInput verwendet. Jetzt habe ich es soweit geschafft, dass ich die GetDeviceData Methode des Device Interfaces gehookt habe.
Delphi-Quellcode:
Die Frage ist, wie bekomme ich es hin, dass ein 2 sekündiger Anschlag der Taste "C" simuliert wird? Habe schon mit den Parametern rumgespielt aber bisher ohne Erfolg. Das Einzige was funktioniert hat, war das Blocken aller Eingaben, indem ich rgdod mit ZeroMemory gelöscht habe.
function C_GetDeviceData(Self: IDirectInputDevice8A; cbObjectData: DWORD;
rgdod: PDIDeviceObjectData; out pdwInOut: DWORD; dwFlags: DWORD): HResult; stdcall; begin Result := O_GetDeviceData(Self, cbObjectData, rgdod, pdwInOut, dwFlags); if (Self = KeyboardInput) then begin end; end; Viele Grüße Zacherl |
Re: DirectInput: GetDeviceData Hook
Wie sicher bist du, dass das Programm tatsächlich DI für Tastatureingaben verwendet? Es gibt von Microsoft nämlich die direkte Empfehlung dies nicht zu tun, sondern DI ausschließlich für Joysticks/-pads und ähnliches zu benutzen. (Abgesehen davon ist es auch noch ziemlich umständlich in der Umsetzung, so dass ich es nicht mal bevorzugen würde wenn es diese Empfehlung nicht gäbe :))
Grundsätzlich habe ich zur Simulation von Eingaben bisher kein Programm gesehen, dass nicht auf ![]() ![]() |
Re: DirectInput: GetDeviceData Hook
Ich bin mir leider gar nicht sicher, dass die Anwendung DI verwendet. :( Es handelt sich um ein etwas spartanischeres Spiel, welches DirectX 9 verwendet. Denke allerdings schon dass DI zum Einsatz kommt, da meine Hook Callbacks ja ausgelöst werden und ich auch wie gesagt per ZeroMemory die kompletten Eingaben blocken kann.
Deine Möglichkeit werde ich direkt mal ausprobieren. Wenn das mit SendInput klappen würde, wäre das perfekt. Ich möchte nur Eingaben senden. Hatte es vorher mit keybrd_event() bzw. mouse_event() probiert, was leider keine Wirkung zeigte. Edit: Mist. Im Optionsmenü, etc. funktioniert das mit SendInput ohne Probleme, soblad man aber im Spiel ist bleiben die Anschläge ohne sichtbare Wirkung -.- |
Re: DirectInput: GetDeviceData Hook
Hmm, das spricht ziemlich für DI, jau. Dafür darf sich der Hersteller mal dezent virtuell gerüffelt fühlen :stupid:
Da ich DI bislang immer bewusst vermieden hab (da ich bis dato nur mit Tastatur+Maus gearbeitet hab), kann ich dir zu Details dabei leider nicht weiter helfen :( |
Re: DirectInput: GetDeviceData Hook
Hab noch bisschen rumprobiert aber komischerweise greift mein Hook wohl nicht immer. Wenn ich die Werte logge, werden nur sporadische Eingaben aufgezeichnet, zumindest keine "Sondertasten". Naja das macht eigentlich nicht, nur bekomme ich es absolut nicht hin, Eingaben hinzuzufügen.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 05:50 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