AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi DirectInput: GetDeviceData Hook
Thema durchsuchen
Ansicht
Themen-Optionen

DirectInput: GetDeviceData Hook

Ein Thema von Zacherl · begonnen am 14. Apr 2010 · letzter Beitrag vom 14. Apr 2010
Antwort Antwort
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#1

DirectInput: GetDeviceData Hook

  Alt 14. Apr 2010, 01:27
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:
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;
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.

Viele Grüße
Zacherl
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#2

Re: DirectInput: GetDeviceData Hook

  Alt 14. Apr 2010, 02:02
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 MSDN-Library durchsuchenSendInput() reagiert hätte. Falls du mit dem Programm aktiv auch Eingaben selber abfangen/verarbeiten möchtest, so würde ich einen MSDN-Library durchsuchenLow Level Hook empfehlen. Der dürfte auch greifen wenn eine DI Anwendung den Fokus hat, wobei ich das noch nicht bewusst getestet hab - es ging einfach bisher nur immer.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#3

Re: DirectInput: GetDeviceData Hook

  Alt 14. Apr 2010, 14:37
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 -.-
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#4

Re: DirectInput: GetDeviceData Hook

  Alt 14. Apr 2010, 16:03
Hmm, das spricht ziemlich für DI, jau. Dafür darf sich der Hersteller mal dezent virtuell gerüffelt fühlen

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
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
Benutzerbild von Zacherl
Zacherl

Registriert seit: 3. Sep 2004
4.629 Beiträge
 
Delphi 10.2 Tokyo Starter
 
#5

Re: DirectInput: GetDeviceData Hook

  Alt 14. Apr 2010, 21:48
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.
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:42 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz