mirror of
https://github.com/FunkyFr3sh/cnc-ddraw.git
synced 2025-03-24 17:49:52 +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 <windows.h>
|
||||||
#include <dinput.h>
|
#include <dinput.h>
|
||||||
#include "hook.h"
|
#include "hook.h"
|
||||||
|
#include "main.h"
|
||||||
|
|
||||||
typedef HRESULT (WINAPI *DIRECTINPUTCREATEAPROC)(HINSTANCE, DWORD, LPDIRECTINPUTA*, LPUNKNOWN);
|
typedef HRESULT (WINAPI *DIRECTINPUTCREATEAPROC)(HINSTANCE, DWORD, LPDIRECTINPUTA*, LPUNKNOWN);
|
||||||
typedef HRESULT (WINAPI *DICREATEDEVICEPROC)(IDirectInputA*, REFGUID, LPDIRECTINPUTDEVICEA *, LPUNKNOWN);
|
typedef HRESULT (WINAPI *DICREATEDEVICEPROC)(IDirectInputA*, REFGUID, LPDIRECTINPUTDEVICEA *, LPUNKNOWN);
|
||||||
typedef HRESULT (WINAPI *DIDSETCOOPERATIVELEVELPROC)(IDirectInputDeviceA *, HWND, DWORD);
|
typedef HRESULT (WINAPI *DIDSETCOOPERATIVELEVELPROC)(IDirectInputDeviceA *, HWND, DWORD);
|
||||||
|
typedef HRESULT (WINAPI *DIDGETDEVICEDATAPROC)(IDirectInputDeviceA*, DWORD, LPDIDEVICEOBJECTDATA, LPDWORD, DWORD);
|
||||||
|
|
||||||
static DIRECTINPUTCREATEAPROC DInputCreateA;
|
static DIRECTINPUTCREATEAPROC DInputCreateA;
|
||||||
static DICREATEDEVICEPROC DICreateDevice;
|
static DICREATEDEVICEPROC DICreateDevice;
|
||||||
static DIDSETCOOPERATIVELEVELPROC DIDSetCooperativeLevel;
|
static DIDSETCOOPERATIVELEVELPROC DIDSetCooperativeLevel;
|
||||||
|
static DIDGETDEVICEDATAPROC DIDGetDeviceData;
|
||||||
|
|
||||||
static PROC HookFunc(PROC *orgFunc, PROC newFunc)
|
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);
|
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)
|
static HRESULT WINAPI fake_DICreateDevice(IDirectInputA *This, REFGUID rguid, LPDIRECTINPUTDEVICEA * lplpDIDevice, LPUNKNOWN pUnkOuter)
|
||||||
{
|
{
|
||||||
HRESULT result = DICreateDevice(This, rguid, lplpDIDevice, pUnkOuter);
|
HRESULT result = DICreateDevice(This, rguid, lplpDIDevice, pUnkOuter);
|
||||||
@ -39,6 +54,10 @@ static HRESULT WINAPI fake_DICreateDevice(IDirectInputA *This, REFGUID rguid, LP
|
|||||||
DIDSetCooperativeLevel =
|
DIDSetCooperativeLevel =
|
||||||
(DIDSETCOOPERATIVELEVELPROC)HookFunc(
|
(DIDSETCOOPERATIVELEVELPROC)HookFunc(
|
||||||
(PROC *)&(*lplpDIDevice)->lpVtbl->SetCooperativeLevel, (PROC)fake_DIDSetCooperativeLevel);
|
(PROC *)&(*lplpDIDevice)->lpVtbl->SetCooperativeLevel, (PROC)fake_DIDSetCooperativeLevel);
|
||||||
|
|
||||||
|
DIDGetDeviceData =
|
||||||
|
(DIDGETDEVICEDATAPROC)HookFunc(
|
||||||
|
(PROC*)&(*lplpDIDevice)->lpVtbl->GetDeviceData, (PROC)fake_DIDGetDeviceData);
|
||||||
}
|
}
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user