Vic Posted June 14, 2011 Share Posted June 14, 2011 Who can help me code a program use Direct Input 8 to send keys to a other window? This is my Project (Not successful!). />http://www.mediafire.com/?x0sps1xs3g1logz I was tryed vzy much but code to Set the keyboard behaviour. Not know continue how i coding it... Plz help me!! Tks vzy much ! Link to comment
Sirmabus Posted June 17, 2011 Share Posted June 17, 2011 (edited) ..Helps Those Who Help ThemselvesStudy the DirectInput API, in particular the methods.Keyboard input is going to be in one of two different ways for DirectInput, either polled or event based.The event based method would be harder to emulate, and luckily I haven't run into it my self.Your target will more then likely be using the polling method.The traditional, but not the only way:1) Hook the "DirectInput8Create" import from "dinput8.dll" to grab the interface pointer as it's created.2) When the API hook fires, from the interface pointer hook the "CreateDevice" vector to catch when the device is created.3) Once the KB device is created, caught from your hook, you finally hook the methods of interest.In your case you want "GetDeviceState" (the polling method, the event/buffered one is "GetDeviceData"), and probably "SetCooperativeLevel" to force keyboard to "DISCL_BACKGROUND | DISCL_NONEXCLUSIVE" flags if you still want to be able to send/emulate/spoof inputs to the target when it is minimized.IDirectInputDevice8::GetDeviceStateMost if not all games will use a full buffer size of 256.What I did that works easy and simple enough is create my own 256 byte array as a flag buffer array.To emulate a key down it's a simple "aFakeKey[uDIKeyCode] = 0x80", for key up "aFakeKey[uDIKeyCode] = 0".Now in your "GetDeviceState" hook you just OR your own array with the real device read.You could also do a "if(GetFocus() == NULL)". If NULL then your window is not in focus (and not taking inputs) so you can just copy over your buffer instead of OR'ing it.To simulate presses independently then you could use another flag (like the first bit) of your array, with a little more code and process it so it's "down" on the first poll and "up" on the next.The method hooking way is usually how people do this for Direct3D too.Just Google for these things, you will find some source code and detailed explanations. Edited June 17, 2011 by Sirmabus 1 Link to comment
Vic Posted June 29, 2011 Author Share Posted June 29, 2011 Ok, I was successful! Thanks u very much. Now, i coding hook to use Direct 3D. I like it. >< Are u know code Delphi? Link to comment
Recommended Posts
Create an account or sign in to comment
You need to be a member in order to leave a comment
Create an account
Sign up for a new account in our community. It's easy!
Register a new accountSign in
Already have an account? Sign in here.
Sign In Now