Skip to content

Instantly share code, notes, and snippets.

@martinamps
Created February 24, 2016 15:57
Show Gist options
  • Save martinamps/c710d113054f385fc5ef to your computer and use it in GitHub Desktop.
Save martinamps/c710d113054f385fc5ef to your computer and use it in GitHub Desktop.
dinput hook
#include <Tlhelp32.h>
#include "DInput.h"
DWORD DInputMod;
DWORD DINPUT_K_1;
DWORD DINPUT_K_2;
DWORD DINPUT_K_3;
DWORD DINPUT_K_4;
DWORD DINPUT_K_5;
DWORD DINPUT_K_6;
DWORD DINPUT_K_7;
DWORD DINPUT_K_8;
DWORD DINPUT_K_TAB;
DWORD DINPUT_K_Q;
DWORD DINPUT_K_W;
DWORD DINPUT_K_E;
DWORD DINPUT_K_R;
DWORD DINPUT_K_T;
DWORD DINPUT_K_Y;
DWORD DINPUT_K_U;
DWORD DINPUT_K_I;
DWORD DINPUT_K_O;
DWORD DINPUT_K_P;
DWORD DINPUT_K_A;
DWORD DINPUT_K_S;
DWORD DINPUT_K_D;
DWORD DINPUT_K_F;
DWORD DINPUT_K_G;
DWORD DINPUT_K_H;
DWORD DINPUT_K_J;
DWORD DINPUT_K_K;
DWORD DINPUT_K_L;
DWORD DINPUT_K_Z;
DWORD DINPUT_K_X;
DWORD DINPUT_K_C;
DWORD DINPUT_K_V;
DWORD DINPUT_K_B;
DWORD DINPUT_K_N;
DWORD DINPUT_K_M;
DWORD DINPUT_K_F1;
DWORD DINPUT_K_F2;
DWORD DINPUT_K_F3;
DWORD DINPUT_K_F4;
DWORD DINPUT_K_F5;
DWORD DINPUT_K_F6;
DWORD DINPUT_K_F7;
DWORD DINPUT_K_F8;
void HookDInput(){
DWORD DIKeyPtr;
DInputMod=FindModule("dinput8.dll");
if (DInputMod==0){
MessageBox(0,"DInput8 not loaded!","",0);
TerminateProcess(GetCurrentProcess(), 0);
}
unsigned char logdata[512];
DIKeyPtr=FindDInputKeyPtr();
wsprintf( (LPSTR)logdata, "Pointer: %02X ", DIKeyPtr);
if (DIKeyPtr!=0){
DINPUT_K_1 = DIKeyPtr + 2;
DINPUT_K_2 = DIKeyPtr + 3;
DINPUT_K_3 = DIKeyPtr + 4;
DINPUT_K_4 = DIKeyPtr + 5;
DINPUT_K_5 = DIKeyPtr + 6;
DINPUT_K_6 = DIKeyPtr + 7;
DINPUT_K_7 = DIKeyPtr + 8;
DINPUT_K_8 = DIKeyPtr + 9;
DINPUT_K_TAB = DIKeyPtr + 15;
DINPUT_K_Q = DIKeyPtr + 16;
DINPUT_K_W = DIKeyPtr + 17;
DINPUT_K_E = DIKeyPtr + 18;
DINPUT_K_R = DIKeyPtr + 19;
DINPUT_K_T = DIKeyPtr + 20;
DINPUT_K_Y = DIKeyPtr + 21;
DINPUT_K_U = DIKeyPtr + 22;
DINPUT_K_I = DIKeyPtr + 23;
DINPUT_K_O = DIKeyPtr + 24;
DINPUT_K_P = DIKeyPtr + 25;
DINPUT_K_A = DIKeyPtr + 30;
DINPUT_K_S = DIKeyPtr + 31;
DINPUT_K_D = DIKeyPtr + 32;
DINPUT_K_F = DIKeyPtr + 33;
DINPUT_K_G = DIKeyPtr + 34;
DINPUT_K_H = DIKeyPtr + 35;
DINPUT_K_J = DIKeyPtr + 36;
DINPUT_K_K = DIKeyPtr + 37;
DINPUT_K_L = DIKeyPtr + 38;
DINPUT_K_Z = DIKeyPtr + 44;
DINPUT_K_X = DIKeyPtr + 45;
DINPUT_K_C = DIKeyPtr + 46;
DINPUT_K_V = DIKeyPtr + 47;
DINPUT_K_B = DIKeyPtr + 48;
DINPUT_K_N = DIKeyPtr + 49;
DINPUT_K_M = DIKeyPtr + 50;
DINPUT_K_F1 = DIKeyPtr + 59;
DINPUT_K_F2 = DIKeyPtr + 60;
DINPUT_K_F3 = DIKeyPtr + 61;
DINPUT_K_F4 = DIKeyPtr + 62;
DINPUT_K_F5 = DIKeyPtr + 63;
DINPUT_K_F6 = DIKeyPtr + 64;
DINPUT_K_F7 = DIKeyPtr + 65;
DINPUT_K_F8 = DIKeyPtr + 66;
}
}
DWORD FindDInputKeyPtr(){
DWORD i;
DWORD retd;
retd=0;
for (i=(DInputMod);i<=(DInputMod+0x3a0000);i++){
if (MemReadByte( i )==0x57 &&
MemReadByte(i+1)==0x6a &&
MemReadByte(i+2)==0x40 &&
MemReadByte(i+3)==0x33 &&
MemReadByte(i+4)==0xc0 &&
MemReadByte(i+5)==0x59 &&
MemReadByte(i+6)==0xbf){
retd=MemReadDWord(i+7);
break;
}
}
return (DWORD)retd;
}
DWORD TranslateKeyInt(INT pKey){
switch (pKey)
{
case 1: return DINPUT_K_1; break;
case 2: return DINPUT_K_2; break;
case 3: return DINPUT_K_3; break;
case 4: return DINPUT_K_4; break;
case 5: return DINPUT_K_5; break;
case 6: return DINPUT_K_6; break;
case 7: return DINPUT_K_7; break;
case 8: return DINPUT_K_8; break;
default:return 0;
}
}
DWORD TranslateKeyFInt(INT pKey){
switch (pKey)
{
case 1: return DINPUT_K_F1; break;
case 2: return DINPUT_K_F2; break;
case 3: return DINPUT_K_F3; break;
case 4: return DINPUT_K_F4; break;
case 5: return DINPUT_K_F5; break;
case 6: return DINPUT_K_F6; break;
case 7: return DINPUT_K_F7; break;
case 8: return DINPUT_K_F8; break;
default:return 0;
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment