mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-15 06:04:49 +01:00
#34 Experimental dinput GetDeviceData (untested...)
This commit is contained in:
parent
7a74cf8009
commit
a240c78a84
19
src/dinput.c
19
src/dinput.c
@ -1,14 +1,17 @@
|
||||
#include <windows.h>
|
||||
#include <dinput.h>
|
||||
#include "hook.h"
|
||||
#include "main.h"
|
||||
|
||||
typedef HRESULT (WINAPI *DIRECTINPUTCREATEAPROC)(HINSTANCE, DWORD, LPDIRECTINPUTA*, LPUNKNOWN);
|
||||
typedef HRESULT (WINAPI *DICREATEDEVICEPROC)(IDirectInputA*, REFGUID, LPDIRECTINPUTDEVICEA *, LPUNKNOWN);
|
||||
typedef HRESULT (WINAPI *DIDSETCOOPERATIVELEVELPROC)(IDirectInputDeviceA *, HWND, DWORD);
|
||||
typedef HRESULT (WINAPI *DIDGETDEVICEDATAPROC)(IDirectInputDeviceA*, DWORD, LPDIDEVICEOBJECTDATA, LPDWORD, DWORD);
|
||||
|
||||
static DIRECTINPUTCREATEAPROC DInputCreateA;
|
||||
static DICREATEDEVICEPROC DICreateDevice;
|
||||
static DIDSETCOOPERATIVELEVELPROC DIDSetCooperativeLevel;
|
||||
static DIDGETDEVICEDATAPROC DIDGetDeviceData;
|
||||
|
||||
static PROC HookFunc(PROC *orgFunc, PROC newFunc)
|
||||
{
|
||||
@ -30,6 +33,18 @@ static HRESULT WINAPI fake_DIDSetCooperativeLevel(IDirectInputDeviceA *This, HWN
|
||||
return DIDSetCooperativeLevel(This, hwnd, DISCL_BACKGROUND | DISCL_NONEXCLUSIVE);
|
||||
}
|
||||
|
||||
static HRESULT WINAPI fake_DIDGetDeviceData(IDirectInputDeviceA *This, DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags)
|
||||
{
|
||||
HRESULT result = DIDGetDeviceData(This, cbObjectData, rgdod, pdwInOut, dwFlags);
|
||||
|
||||
if (SUCCEEDED(result) && ddraw && !ddraw->locked)
|
||||
{
|
||||
*pdwInOut = 0;
|
||||
}
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
static HRESULT WINAPI fake_DICreateDevice(IDirectInputA *This, REFGUID rguid, LPDIRECTINPUTDEVICEA * lplpDIDevice, LPUNKNOWN pUnkOuter)
|
||||
{
|
||||
HRESULT result = DICreateDevice(This, rguid, lplpDIDevice, pUnkOuter);
|
||||
@ -39,6 +54,10 @@ static HRESULT WINAPI fake_DICreateDevice(IDirectInputA *This, REFGUID rguid, LP
|
||||
DIDSetCooperativeLevel =
|
||||
(DIDSETCOOPERATIVELEVELPROC)HookFunc(
|
||||
(PROC *)&(*lplpDIDevice)->lpVtbl->SetCooperativeLevel, (PROC)fake_DIDSetCooperativeLevel);
|
||||
|
||||
DIDGetDeviceData =
|
||||
(DIDGETDEVICEDATAPROC)HookFunc(
|
||||
(PROC*)&(*lplpDIDevice)->lpVtbl->GetDeviceData, (PROC)fake_DIDGetDeviceData);
|
||||
}
|
||||
|
||||
return result;
|
||||
|
Loading…
x
Reference in New Issue
Block a user