I'm trying to spoof a PS3 controller and send analog stick directional input to a specific program, but i can't figure out how the INPUT.hi struct works. I can send keypresses over with
INPUT keys;
keys.type = INPUT_KEYBOARD;
keys.ki.dwFlags = KEYEVENTF_SCANCODE;
keys.ki.wScan = 0x11;//hex for 'w' key
SendInput(1, &keys, sizeof(INPUT));
Sleep(60);//delay to ensure game doesnt drop keypress
keys.ki.dwFlags = KEYEVENTF_SCANCODE | KEYEVENTF_KEYUP;
SendInput(1, &keys, sizeof(INPUT));
and i believe that sending over joystick commands would work similarly, something like
INPUT analogSticks;
analogSticks.type = INPUT_HARDWARE;
analogSticks.hi.uMsg = WM_INPUT;
analogSticks.hi.wParamL = //what are the values for these?
analogSticks.hi.wParamH = //what are the values for these?
SendInput(1, &analogSticks, sizeof(INPUT));
but trying out different values for wParamL and wParamH doesnt do anything. Am i doing something wrong, and/or is there a way i can input specific angles, say, if i were to put in 45, i could generate a joystick signal that would correspond to that angle, much like i can do with keypresses?
wParamL
andwParamH
combine to form thewParam
for the specifieduMsg
. Unfortunately, forWM_INPUT
, this is eitherRIM_INPUT
orRIM_INPUTSINK
, with the actual input data sent inlParam
instead. I have a feeling that either a)WM_INPUT
isn't the correct message forSendInput()
, or b) worse, that you won't be able to spoof a PS3 controller withSendInput()
. Unfortunately, I don't know for sure; I'm only basing this off MSDN and I have no expertise here, sorry. Good luck. – Aid