diff --git a/dinput8/CDirectInput8Globals.h b/dinput8/CDirectInput8Globals.h index 54db76dd..f01f61ec 100644 --- a/dinput8/CDirectInput8Globals.h +++ b/dinput8/CDirectInput8Globals.h @@ -5,22 +5,12 @@ class CDirectInput8Globals private: DWORD threadId = 0; HANDLE hThread = 0; - DWORD dikMapping[256] = {}; - const wchar_t* dikNames[256] = {}; CRITICAL_SECTION critSect = {}; public: - bool enableGamepadSupport = false; - // Sequence number for keyboard actions DWORD dwSequence = 0; - // Key-States received via WM_INPUT / Raw-Input - BYTE keyStates[256] = {}; - - // Key-States actually sent to the game - BYTE gameKeyStates[256] = {}; - // Mouse-State for GetDeviceData() / GetDeviceState() DIMOUSESTATE* mouseStateDeviceData = new DIMOUSESTATE(); DIMOUSESTATE* mouseStateDeviceDataGame = new DIMOUSESTATE(); @@ -39,257 +29,6 @@ class CDirectInput8Globals } dwSequence = 1; - - InitializeKeyMappings(); - InitializeKeyNames(); - } - - void InitializeKeyMappings() - { - ZeroMemory(dikMapping, sizeof(dikMapping)); - dikMapping[VK_LBUTTON] = 0xFF; - dikMapping[VK_RBUTTON] = 0xFF; - dikMapping[VK_MBUTTON] = 0xFF; - dikMapping[VK_OEM_1] = 0xFF; - dikMapping[VK_OEM_2] = 0xFF; - - dikMapping[VK_SHIFT] = DIK_LSHIFT; - dikMapping[VK_CONTROL] = DIK_LCONTROL; - dikMapping[VK_MENU] = DIK_LMENU; - - dikMapping[VK_OEM_PLUS] = DIK_ADD; - dikMapping[VK_OEM_COMMA] = DIK_COMMA; - dikMapping[VK_OEM_MINUS] = DIK_MINUS; - dikMapping[VK_OEM_PERIOD] = DIK_PERIOD; - - dikMapping[VK_LMENU] = DIK_LMENU; - dikMapping[VK_RMENU] = DIK_RMENU; - dikMapping[VK_BACK] = DIK_BACK; - dikMapping[VK_TAB] = DIK_TAB; - dikMapping[VK_RETURN] = DIK_RETURN; - dikMapping[VK_LSHIFT] = DIK_LSHIFT; - dikMapping[VK_RSHIFT] = DIK_RSHIFT; - dikMapping[VK_LCONTROL] = DIK_LCONTROL; - dikMapping[VK_RCONTROL] = DIK_RCONTROL; - dikMapping[VK_PAUSE] = DIK_PAUSE; - dikMapping[VK_CAPITAL] = DIK_CAPITAL; - dikMapping[VK_ESCAPE] = DIK_ESCAPE; - dikMapping[VK_SPACE] = DIK_SPACE; - dikMapping[VK_PRIOR] = DIK_PRIOR; - dikMapping[VK_NEXT] = DIK_NEXT; - dikMapping[VK_END] = DIK_END; - dikMapping[VK_HOME] = DIK_HOME; - dikMapping[VK_LEFT] = DIK_LEFT; - dikMapping[VK_UP] = DIK_UP; - dikMapping[VK_RIGHT] = DIK_RIGHT; - dikMapping[VK_DOWN] = DIK_DOWN; - dikMapping[VK_INSERT] = DIK_INSERT; - dikMapping[VK_DELETE] = DIK_DELETE; - dikMapping[0x30] = DIK_0; - dikMapping[0x31] = DIK_1; - dikMapping[0x32] = DIK_2; - dikMapping[0x33] = DIK_3; - dikMapping[0x34] = DIK_4; - dikMapping[0x35] = DIK_5; - dikMapping[0x36] = DIK_6; - dikMapping[0x37] = DIK_7; - dikMapping[0x38] = DIK_8; - dikMapping[0x39] = DIK_9; - - dikMapping[0x41] = DIK_A; - dikMapping[0x42] = DIK_B; - dikMapping[0x43] = DIK_C; - dikMapping[0x44] = DIK_D; - dikMapping[0x45] = DIK_E; - dikMapping[0x46] = DIK_F; - dikMapping[0x47] = DIK_G; - dikMapping[0x48] = DIK_H; - dikMapping[0x49] = DIK_I; - dikMapping[0x4A] = DIK_J; - dikMapping[0x4B] = DIK_K; - dikMapping[0x4C] = DIK_L; - dikMapping[0x4D] = DIK_M; - dikMapping[0x4E] = DIK_N; - dikMapping[0x4F] = DIK_O; - dikMapping[0x50] = DIK_P; - dikMapping[0x51] = DIK_Q; - dikMapping[0x52] = DIK_R; - dikMapping[0x53] = DIK_S; - dikMapping[0x54] = DIK_T; - dikMapping[0x55] = DIK_U; - dikMapping[0x56] = DIK_V; - dikMapping[0x57] = DIK_W; - dikMapping[0x58] = DIK_X; - dikMapping[0x59] = DIK_Y; - dikMapping[0x5A] = DIK_Z; - - dikMapping[VK_LWIN] = DIK_LWIN; - dikMapping[VK_RWIN] = DIK_RWIN; - - dikMapping[VK_NUMPAD0] = DIK_NUMPAD0; - dikMapping[VK_NUMPAD1] = DIK_NUMPAD1; - dikMapping[VK_NUMPAD2] = DIK_NUMPAD2; - dikMapping[VK_NUMPAD3] = DIK_NUMPAD3; - dikMapping[VK_NUMPAD4] = DIK_NUMPAD4; - dikMapping[VK_NUMPAD5] = DIK_NUMPAD5; - dikMapping[VK_NUMPAD6] = DIK_NUMPAD6; - dikMapping[VK_NUMPAD7] = DIK_NUMPAD7; - dikMapping[VK_NUMPAD8] = DIK_NUMPAD8; - dikMapping[VK_NUMPAD9] = DIK_NUMPAD9; - - dikMapping[VK_MULTIPLY] = DIK_MULTIPLY; - dikMapping[VK_ADD] = DIK_ADD; - dikMapping[VK_SUBTRACT] = DIK_SUBTRACT; - dikMapping[VK_DECIMAL] = DIK_DECIMAL; - dikMapping[VK_DIVIDE] = DIK_DIVIDE; - - dikMapping[VK_F1] = DIK_F1; - dikMapping[VK_F2] = DIK_F2; - dikMapping[VK_F3] = DIK_F3; - dikMapping[VK_F4] = DIK_F4; - dikMapping[VK_F5] = DIK_F5; - dikMapping[VK_F6] = DIK_F6; - dikMapping[VK_F7] = DIK_F7; - dikMapping[VK_F8] = DIK_F8; - dikMapping[VK_F9] = DIK_F9; - dikMapping[VK_F10] = DIK_F10; - dikMapping[VK_F11] = DIK_F11; - dikMapping[VK_F12] = DIK_F12; - - dikMapping[VK_NUMLOCK] = DIK_NUMLOCK; - } - - void InitializeKeyNames() - { - ZeroMemory(dikNames, sizeof(dikNames)); - - dikNames[DIK_ADD] = L"+"; - dikNames[DIK_COMMA] = L","; - dikNames[DIK_MINUS] = L"-"; - dikNames[DIK_PERIOD] = L"."; - - dikNames[DIK_LMENU] = L"Left-Alt"; - dikNames[DIK_RMENU] = L"Right-Alt"; - dikNames[DIK_BACK] = L"Back"; - dikNames[DIK_TAB] = L"Tab"; - dikNames[DIK_RETURN] = L"Return"; - dikNames[DIK_LSHIFT] = L"Left-Shift"; - dikNames[DIK_RSHIFT] = L"Right-Shift"; - dikNames[DIK_LCONTROL] = L"Left-Control"; - dikNames[DIK_RCONTROL] = L"Right-Control"; - dikNames[DIK_PAUSE] = L"Pause"; - dikNames[DIK_CAPITAL] = L"Caps-Lock"; - dikNames[DIK_ESCAPE] = L"Escape"; - dikNames[DIK_SPACE] = L"Space"; - dikNames[DIK_PRIOR] = L"Prior"; - dikNames[DIK_NEXT] = L"Next"; - dikNames[DIK_END] = L"End"; - dikNames[DIK_HOME] = L"Home"; - dikNames[DIK_LEFT] = L"Left"; - dikNames[DIK_UP] = L"Up"; - dikNames[DIK_RIGHT] = L"Right"; - dikNames[DIK_DOWN] = L"Down"; - dikNames[DIK_INSERT] = L"Insert"; - dikNames[DIK_DELETE] = L"Delete"; - dikNames[DIK_0] = L"0"; - dikNames[DIK_1] = L"1"; - dikNames[DIK_2] = L"2"; - dikNames[DIK_3] = L"3"; - dikNames[DIK_4] = L"4"; - dikNames[DIK_5] = L"5"; - dikNames[DIK_6] = L"6"; - dikNames[DIK_7] = L"7"; - dikNames[DIK_8] = L"8"; - dikNames[DIK_9] = L"9"; - - dikNames[DIK_A] = L"A"; - dikNames[DIK_B] = L"B"; - dikNames[DIK_C] = L"C"; - dikNames[DIK_D] = L"D"; - dikNames[DIK_E] = L"E"; - dikNames[DIK_F] = L"F"; - dikNames[DIK_G] = L"G"; - dikNames[DIK_H] = L"H"; - dikNames[DIK_I] = L"I"; - dikNames[DIK_J] = L"J"; - dikNames[DIK_K] = L"K"; - dikNames[DIK_L] = L"L"; - dikNames[DIK_M] = L"M"; - dikNames[DIK_N] = L"N"; - dikNames[DIK_O] = L"O"; - dikNames[DIK_P] = L"P"; - dikNames[DIK_Q] = L"Q"; - dikNames[DIK_R] = L"R"; - dikNames[DIK_S] = L"S"; - dikNames[DIK_T] = L"T"; - dikNames[DIK_U] = L"U"; - dikNames[DIK_V] = L"V"; - dikNames[DIK_W] = L"W"; - dikNames[DIK_X] = L"X"; - dikNames[DIK_Y] = L"Y"; - dikNames[DIK_Z] = L"Z"; - - dikNames[DIK_LWIN] = L"Left-Win"; - dikNames[DIK_RWIN] = L"Right-Win"; - - dikNames[DIK_NUMPAD0] = L"Numpad-0"; - dikNames[DIK_NUMPAD1] = L"Numpad-1"; - dikNames[DIK_NUMPAD2] = L"Numpad-2"; - dikNames[DIK_NUMPAD3] = L"Numpad-3"; - dikNames[DIK_NUMPAD4] = L"Numpad-4"; - dikNames[DIK_NUMPAD5] = L"Numpad-5"; - dikNames[DIK_NUMPAD6] = L"Numpad-6"; - dikNames[DIK_NUMPAD7] = L"Numpad-7"; - dikNames[DIK_NUMPAD8] = L"Numpad-8"; - dikNames[DIK_NUMPAD9] = L"Numpad-9"; - - dikNames[DIK_MULTIPLY] = L"*"; - dikNames[DIK_ADD] = L"+"; - dikNames[DIK_SUBTRACT] = L"-"; - dikNames[DIK_DECIMAL] = L"."; - dikNames[DIK_DIVIDE] = L"/"; - - dikNames[DIK_F1] = L"F1"; - dikNames[DIK_F2] = L"F2"; - dikNames[DIK_F3] = L"F3"; - dikNames[DIK_F4] = L"F4"; - dikNames[DIK_F5] = L"F5"; - dikNames[DIK_F6] = L"F6"; - dikNames[DIK_F7] = L"F7"; - dikNames[DIK_F8] = L"F8"; - dikNames[DIK_F9] = L"F9"; - dikNames[DIK_F10] = L"F10"; - dikNames[DIK_F11] = L"F11"; - dikNames[DIK_F12] = L"F12"; - - dikNames[DIK_NUMLOCK] = L"Num-Lock"; - } - - void GetKeyNameW(DWORD dik, wchar_t* keyName) - { - const wchar_t* keyNameMapped = dikNames[dik]; - - if (keyNameMapped) - { - lstrcpyW(keyName, keyNameMapped); - } - else - { - wsprintfW(keyName, L"Unknown key 0x%x", dik); - } - } - - void GetKeyNameA(DWORD dik, char* keyName) - { - wchar_t keyNameW[4096]; - - GetKeyNameW(dik, keyNameW); - ToAnsi(keyNameW, keyName); - } - - void ToAnsi(wchar_t* inputString, char* outputString) - { - WideCharToMultiByte(CP_ACP, 0, inputString, -1, outputString, 4096, NULL, NULL); } void Lock() diff --git a/dinput8/CDirectInputDeviceMouse8.h b/dinput8/CDirectInputDeviceMouse8.h index f346f4a2..5f223f82 100644 --- a/dinput8/CDirectInputDeviceMouse8.h +++ b/dinput8/CDirectInputDeviceMouse8.h @@ -7,12 +7,16 @@ class CDirectInputDeviceMouse8 bool exclusiveMode = false; bool isAquired = false; HWND hWndForegroundWindow = nullptr; + DIDEVICEINSTANCEA mouseDeviceInfoA = {}; + DIDEVICEINSTANCEW mouseDeviceInfoW = {}; public: DWORD dwDevType = 0; CDirectInputDeviceMouse8() { + Logging::Log() << __FUNCTION__ << " Using Raw mouse input for DirectInput8!"; + if (!hidDllLoaded) { LoadHidLibrary(); @@ -21,14 +25,29 @@ class CDirectInputDeviceMouse8 { diGlobalsInstance = new CDirectInput8Globals(); } - Logging::Log() << __FUNCTION__ << " Using Raw mouse input for DirectInput8!"; + + mouseDeviceInfoA.dwSize = sizeof(DIDEVICEINSTANCEA); + mouseDeviceInfoA.guidInstance = GUID_SysMouse; + mouseDeviceInfoA.guidProduct = GUID_SysMouse; + mouseDeviceInfoA.dwDevType = DI8DEVTYPE_MOUSE | (DI8DEVTYPEMOUSE_UNKNOWN << 8); + StringCbCopyA(mouseDeviceInfoA.tszInstanceName, sizeof(mouseDeviceInfoA.tszInstanceName), "Mouse"); + StringCbCopyA(mouseDeviceInfoA.tszProductName, sizeof(mouseDeviceInfoA.tszProductName), "Mouse"); + + mouseDeviceInfoW.dwSize = sizeof(DIDEVICEINSTANCEW); + mouseDeviceInfoW.guidInstance = GUID_SysMouse; + mouseDeviceInfoW.guidProduct = GUID_SysMouse; + mouseDeviceInfoW.dwDevType = DI8DEVTYPE_MOUSE | (DI8DEVTYPEMOUSE_UNKNOWN << 8); + StringCbCopyW(mouseDeviceInfoW.tszInstanceName, sizeof(mouseDeviceInfoW.tszInstanceName), L"Mouse"); + StringCbCopyW(mouseDeviceInfoW.tszProductName, sizeof(mouseDeviceInfoW.tszProductName), L"Mouse"); + + this->dwDevType = mouseDeviceInfoA.dwDevType; } ~CDirectInputDeviceMouse8() { diGlobalsInstance->mouseEventHandle = nullptr; } - HRESULT STDMETHODCALLTYPE Base_GetCapabilities(LPDIDEVCAPS lpDIDevCaps) + HRESULT STDMETHODCALLTYPE GetCapabilities(LPDIDEVCAPS lpDIDevCaps) { if (!lpDIDevCaps || (lpDIDevCaps->dwSize != sizeof(DIDEVCAPS_DX3) && lpDIDevCaps->dwSize != sizeof(DIDEVCAPS))) { @@ -52,19 +71,19 @@ class CDirectInputDeviceMouse8 return DI_OK; } - HRESULT STDMETHODCALLTYPE Base_Acquire() + HRESULT STDMETHODCALLTYPE Acquire() { bool isAlreadyAquired = this->isAquired; this->hWndForegroundWindow = GetForegroundWindow(); - this->Base_AcquireInternal(); + this->AcquireInternal(); this->isAquired = true; return isAlreadyAquired ? S_FALSE : DI_OK; } - void Base_AcquireInternal() + void AcquireInternal() { if (!this->isAquired) { @@ -85,7 +104,7 @@ class CDirectInputDeviceMouse8 } } - HRESULT STDMETHODCALLTYPE Base_Unacquire() + HRESULT STDMETHODCALLTYPE Unacquire() { bool isAlreadyAquired = this->isAquired; @@ -101,14 +120,14 @@ class CDirectInputDeviceMouse8 return !isAlreadyAquired ? DI_NOEFFECT : DI_OK; } - HRESULT STDMETHODCALLTYPE Base_GetDeviceState(DWORD cbData, LPVOID lpvData) + HRESULT STDMETHODCALLTYPE GetDeviceState(DWORD cbData, LPVOID lpvData) { if (!this->isAquired) { return DIERR_INPUTLOST; } - this->Base_AcquireInternal(); + this->AcquireInternal(); diGlobalsInstance->Lock(); { @@ -126,7 +145,7 @@ class CDirectInputDeviceMouse8 return DI_OK; } - HRESULT STDMETHODCALLTYPE Base_GetDeviceData(DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) + HRESULT STDMETHODCALLTYPE GetDeviceData(DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) { if (!this->isAquired) { @@ -150,7 +169,7 @@ class CDirectInputDeviceMouse8 GetSystemTimeAsFileTime((FILETIME*)&fTime); fTime = fTime / 1000; - this->Base_AcquireInternal(); + this->AcquireInternal(); diGlobalsInstance->Lock(); { @@ -161,8 +180,6 @@ class CDirectInputDeviceMouse8 else if ((*pdwInOut == INFINITE) && (rgdod == NULL)) { // Flush buffer - ZeroMemory(diGlobalsInstance->keyStates, sizeof(diGlobalsInstance->keyStates)); - ZeroMemory(diGlobalsInstance->gameKeyStates, sizeof(diGlobalsInstance->gameKeyStates)); } else if (rgdod) { @@ -284,7 +301,7 @@ class CDirectInputDeviceMouse8 return DI_OK; } - HRESULT STDMETHODCALLTYPE Base_SetDataFormat(LPCDIDATAFORMAT lpdf) + HRESULT STDMETHODCALLTYPE SetDataFormat(LPCDIDATAFORMAT lpdf) { if (!lpdf || lpdf->dwSize != sizeof(DIDATAFORMAT)) { @@ -301,7 +318,7 @@ class CDirectInputDeviceMouse8 return DI_OK; } - HRESULT STDMETHODCALLTYPE Base_SetEventNotification(HANDLE hEvent) + HRESULT STDMETHODCALLTYPE SetEventNotification(HANDLE hEvent) { diGlobalsInstance->Lock(); @@ -313,7 +330,7 @@ class CDirectInputDeviceMouse8 return DI_OK; } - HRESULT STDMETHODCALLTYPE Base_SetCooperativeLevel(HWND hwnd, DWORD dwFlags) + HRESULT STDMETHODCALLTYPE SetCooperativeLevel(HWND hwnd, DWORD dwFlags) { UNREFERENCED_PARAMETER(hwnd); @@ -321,4 +338,28 @@ class CDirectInputDeviceMouse8 return DI_OK; } + + HRESULT STDMETHODCALLTYPE GetDeviceInfo(LPDIDEVICEINSTANCEA pdidi) + { + if (!pdidi || (pdidi->dwSize != sizeof(DIDEVICEINSTANCE_DX3A) && pdidi->dwSize != sizeof(DIDEVICEINSTANCEA))) + { + return DIERR_INVALIDPARAM; + } + + memcpy(pdidi, &mouseDeviceInfoA, pdidi->dwSize); + + return DI_OK; + } + + HRESULT STDMETHODCALLTYPE GetDeviceInfo(LPDIDEVICEINSTANCEW pdidi) + { + if (!pdidi || (pdidi->dwSize != sizeof(DIDEVICEINSTANCE_DX3W) && pdidi->dwSize != sizeof(DIDEVICEINSTANCEW))) + { + return DIERR_INVALIDPARAM; + } + + memcpy(pdidi, &mouseDeviceInfoW, pdidi->dwSize); + + return DI_OK; + } }; \ No newline at end of file diff --git a/dinput8/CDirectInputDeviceMouse8A.h b/dinput8/CDirectInputDeviceMouse8A.h deleted file mode 100644 index 698e355c..00000000 --- a/dinput8/CDirectInputDeviceMouse8A.h +++ /dev/null @@ -1,74 +0,0 @@ -#pragma once - -class CDirectInputDeviceMouse8A : public CDirectInputDeviceMouse8 -{ -private: - DIDEVICEINSTANCEA* mouseDeviceInfo = nullptr; - -public: - CDirectInputDeviceMouse8A() : CDirectInputDeviceMouse8() - { - mouseDeviceInfo = new DIDEVICEINSTANCEA(); - ZeroMemory(mouseDeviceInfo, sizeof(DIDEVICEINSTANCEA)); - mouseDeviceInfo->dwSize = sizeof(DIDEVICEINSTANCEA); - mouseDeviceInfo->guidInstance = GUID_SysMouse; - mouseDeviceInfo->guidProduct = GUID_SysMouse; - mouseDeviceInfo->dwDevType = DI8DEVTYPE_MOUSE | (DI8DEVTYPEMOUSE_UNKNOWN << 8); - StringCbCopyA(mouseDeviceInfo->tszInstanceName, sizeof(mouseDeviceInfo->tszInstanceName), "Mouse"); - StringCbCopyA(mouseDeviceInfo->tszProductName, sizeof(mouseDeviceInfo->tszProductName), "Mouse"); - - this->dwDevType = mouseDeviceInfo->dwDevType; - } - - HRESULT STDMETHODCALLTYPE GetCapabilities(LPDIDEVCAPS lpDIDevCaps) - { - return Base_GetCapabilities(lpDIDevCaps); - } - - HRESULT STDMETHODCALLTYPE Acquire() - { - return Base_Acquire(); - } - - HRESULT STDMETHODCALLTYPE Unacquire() - { - return Base_Unacquire(); - } - - HRESULT STDMETHODCALLTYPE GetDeviceState(DWORD cbData, LPVOID lpvData) - { - return Base_GetDeviceState(cbData, lpvData); - } - - HRESULT STDMETHODCALLTYPE GetDeviceData(DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) - { - return Base_GetDeviceData(cbObjectData, rgdod, pdwInOut, dwFlags); - } - - HRESULT STDMETHODCALLTYPE SetDataFormat(LPCDIDATAFORMAT lpdf) - { - return Base_SetDataFormat(lpdf); - } - - HRESULT STDMETHODCALLTYPE SetEventNotification(HANDLE hEvent) - { - return Base_SetEventNotification(hEvent); - } - - HRESULT STDMETHODCALLTYPE SetCooperativeLevel(HWND hwnd, DWORD dwFlags) - { - return Base_SetCooperativeLevel(hwnd, dwFlags); - } - - HRESULT STDMETHODCALLTYPE GetDeviceInfo(LPDIDEVICEINSTANCEA pdidi) - { - if (!pdidi || (pdidi->dwSize != sizeof(DIDEVICEINSTANCE_DX3A) && pdidi->dwSize != sizeof(DIDEVICEINSTANCEA))) - { - return DIERR_INVALIDPARAM; - } - - memcpy(pdidi, mouseDeviceInfo, pdidi->dwSize); - - return DI_OK; - } -}; \ No newline at end of file diff --git a/dinput8/CDirectInputDeviceMouse8W.h b/dinput8/CDirectInputDeviceMouse8W.h deleted file mode 100644 index 2cad8066..00000000 --- a/dinput8/CDirectInputDeviceMouse8W.h +++ /dev/null @@ -1,74 +0,0 @@ -#pragma once - -class CDirectInputDeviceMouse8W : public CDirectInputDeviceMouse8 -{ -private: - DIDEVICEINSTANCEW* mouseDeviceInfo = nullptr; - -public: - CDirectInputDeviceMouse8W() : CDirectInputDeviceMouse8() - { - mouseDeviceInfo = new DIDEVICEINSTANCEW(); - ZeroMemory(mouseDeviceInfo, sizeof(DIDEVICEINSTANCEW)); - mouseDeviceInfo->dwSize = sizeof(DIDEVICEINSTANCEW); - mouseDeviceInfo->guidInstance = GUID_SysMouse; - mouseDeviceInfo->guidProduct = GUID_SysMouse; - mouseDeviceInfo->dwDevType = DI8DEVTYPE_MOUSE | (DI8DEVTYPEMOUSE_UNKNOWN << 8); - StringCbCopyW(mouseDeviceInfo->tszInstanceName, sizeof(mouseDeviceInfo->tszInstanceName), L"Mouse"); - StringCbCopyW(mouseDeviceInfo->tszProductName, sizeof(mouseDeviceInfo->tszProductName), L"Mouse"); - - this->dwDevType = mouseDeviceInfo->dwDevType; - } - - HRESULT STDMETHODCALLTYPE GetCapabilities(LPDIDEVCAPS lpDIDevCaps) - { - return Base_GetCapabilities(lpDIDevCaps); - } - - HRESULT STDMETHODCALLTYPE Acquire() - { - return Base_Acquire(); - } - - HRESULT STDMETHODCALLTYPE Unacquire() - { - return Base_Unacquire(); - } - - HRESULT STDMETHODCALLTYPE GetDeviceState(DWORD cbData, LPVOID lpvData) - { - return Base_GetDeviceState(cbData, lpvData); - } - - HRESULT STDMETHODCALLTYPE GetDeviceData(DWORD cbObjectData, LPDIDEVICEOBJECTDATA rgdod, LPDWORD pdwInOut, DWORD dwFlags) - { - return Base_GetDeviceData(cbObjectData, rgdod, pdwInOut, dwFlags); - } - - HRESULT STDMETHODCALLTYPE SetDataFormat(LPCDIDATAFORMAT lpdf) - { - return Base_SetDataFormat(lpdf); - } - - HRESULT STDMETHODCALLTYPE SetEventNotification(HANDLE hEvent) - { - return Base_SetEventNotification(hEvent); - } - - HRESULT STDMETHODCALLTYPE SetCooperativeLevel(HWND hwnd, DWORD dwFlags) - { - return Base_SetCooperativeLevel(hwnd, dwFlags); - } - - HRESULT STDMETHODCALLTYPE GetDeviceInfo(LPDIDEVICEINSTANCEW pdidi) - { - if (!pdidi || (pdidi->dwSize != sizeof(DIDEVICEINSTANCE_DX3) && pdidi->dwSize != sizeof(DIDEVICEINSTANCEA))) - { - return DIERR_INVALIDPARAM; - } - - memcpy(pdidi, mouseDeviceInfo, pdidi->dwSize); - - return DI_OK; - } -}; \ No newline at end of file diff --git a/dinput8/IDirectInput8.cpp b/dinput8/IDirectInput8.cpp index bd28e89e..389ce18b 100644 --- a/dinput8/IDirectInput8.cpp +++ b/dinput8/IDirectInput8.cpp @@ -78,6 +78,11 @@ HRESULT m_IDirectInput8::CreateDeviceT(REFGUID rguid, V lplpDirectInputDevice, L if (IsEqualIID(GUID_SysMouse, rguid) || IsEqualIID(GUID_SysMouseEm, rguid) || IsEqualIID(GUID_SysMouseEm2, rguid)) { pAddressX->SetAsMouse(); + + if (Config.UseRawInputForMouse) + { + pAddressX->SetCDirectInputDeviceMouse8(new CDirectInputDeviceMouse8); + } } } diff --git a/dinput8/IDirectInputDevice8.cpp b/dinput8/IDirectInputDevice8.cpp index efb5ac7f..8334c399 100644 --- a/dinput8/IDirectInputDevice8.cpp +++ b/dinput8/IDirectInputDevice8.cpp @@ -64,6 +64,11 @@ HRESULT m_IDirectInputDevice8::GetCapabilities(LPDIDEVCAPS lpDIDevCaps) { Logging::LogDebug() << __FUNCTION__ << " (" << this << ")"; + if (pCDirectInputDeviceMouse8) + { + return pCDirectInputDeviceMouse8->GetCapabilities(lpDIDevCaps); + } + return ProxyInterface->GetCapabilities(lpDIDevCaps); } @@ -95,6 +100,11 @@ HRESULT m_IDirectInputDevice8::Acquire() { Logging::LogDebug() << __FUNCTION__ << " (" << this << ")"; + if (pCDirectInputDeviceMouse8) + { + return pCDirectInputDeviceMouse8->Acquire(); + } + return ProxyInterface->Acquire(); } @@ -102,6 +112,11 @@ HRESULT m_IDirectInputDevice8::Unacquire() { Logging::LogDebug() << __FUNCTION__ << " (" << this << ")"; + if (pCDirectInputDeviceMouse8) + { + return pCDirectInputDeviceMouse8->Unacquire(); + } + return ProxyInterface->Unacquire(); } @@ -109,6 +124,11 @@ HRESULT m_IDirectInputDevice8::GetDeviceState(DWORD cbData, LPVOID lpvData) { Logging::LogDebug() << __FUNCTION__ << " (" << this << ")"; + if (pCDirectInputDeviceMouse8) + { + return pCDirectInputDeviceMouse8->GetDeviceState(cbData, lpvData); + } + return ProxyInterface->GetDeviceState(cbData, lpvData); } @@ -133,6 +153,11 @@ HRESULT m_IDirectInputDevice8::GetDeviceData(DWORD cbObjectData, LPDIDEVICEOBJEC } } + if (pCDirectInputDeviceMouse8) + { + return pCDirectInputDeviceMouse8->GetDeviceData(cbObjectData, rgdod, pdwInOut, dwFlags); + } + return ProxyInterface->GetDeviceData(cbObjectData, rgdod, pdwInOut, dwFlags); } @@ -140,6 +165,11 @@ HRESULT m_IDirectInputDevice8::SetDataFormat(LPCDIDATAFORMAT lpdf) { Logging::LogDebug() << __FUNCTION__ << " (" << this << ")"; + if (pCDirectInputDeviceMouse8) + { + return pCDirectInputDeviceMouse8->SetDataFormat(lpdf); + } + return ProxyInterface->SetDataFormat(lpdf); } @@ -147,6 +177,11 @@ HRESULT m_IDirectInputDevice8::SetEventNotification(HANDLE hEvent) { Logging::LogDebug() << __FUNCTION__ << " (" << this << ")"; + if (pCDirectInputDeviceMouse8) + { + return pCDirectInputDeviceMouse8->SetEventNotification(hEvent); + } + return ProxyInterface->SetEventNotification(hEvent); } @@ -154,6 +189,11 @@ HRESULT m_IDirectInputDevice8::SetCooperativeLevel(HWND hwnd, DWORD dwFlags) { Logging::LogDebug() << __FUNCTION__ << " (" << this << ")"; + if (pCDirectInputDeviceMouse8) + { + return pCDirectInputDeviceMouse8->SetCooperativeLevel(hwnd, dwFlags); + } + return ProxyInterface->SetCooperativeLevel(hwnd, dwFlags); } @@ -174,6 +214,11 @@ HRESULT m_IDirectInputDevice8::GetDeviceInfoT(V pdidi) { Logging::LogDebug() << __FUNCTION__ << " (" << this << ")"; + if (pCDirectInputDeviceMouse8) + { + return pCDirectInputDeviceMouse8->GetDeviceInfo(pdidi); + } + return GetProxyInterface()->GetDeviceInfo(pdidi); } diff --git a/dinput8/IDirectInputDevice8.h b/dinput8/IDirectInputDevice8.h index 37918215..04f40c53 100644 --- a/dinput8/IDirectInputDevice8.h +++ b/dinput8/IDirectInputDevice8.h @@ -5,6 +5,7 @@ class m_IDirectInputDevice8 : public IDirectInputDevice8A, public IDirectInputDe private: IDirectInputDevice8W *ProxyInterface; REFIID WrapperID; + CDirectInputDeviceMouse8* pCDirectInputDeviceMouse8 = nullptr; bool IsMouse = false; DWORD ProcessID; @@ -60,6 +61,11 @@ class m_IDirectInputDevice8 : public IDirectInputDevice8A, public IDirectInputDe { LOG_LIMIT(3, __FUNCTION__ << " (" << this << ")" << " deleting interface!"); + if (pCDirectInputDeviceMouse8) + { + delete pCDirectInputDeviceMouse8; + } + ProxyAddressLookupTableDinput8.DeleteAddress(this); } @@ -171,4 +177,5 @@ class m_IDirectInputDevice8 : public IDirectInputDevice8A, public IDirectInputDe // Helper functions void SetAsMouse() { IsMouse = true; } + void SetCDirectInputDeviceMouse8(CDirectInputDeviceMouse8* pAddress) { pCDirectInputDeviceMouse8 = pAddress; } }; diff --git a/dinput8/dinput8.h b/dinput8/dinput8.h index 17fbd547..74870eb0 100644 --- a/dinput8/dinput8.h +++ b/dinput8/dinput8.h @@ -40,8 +40,6 @@ using namespace Dinput8Wrapper; #include "CDirectInput8Globals.h" #include "CDirectInputDeviceMouse8.h" -#include "CDirectInputDeviceMouse8A.h" -#include "CDirectInputDeviceMouse8W.h" #include "IDirectInput8.h" #include "IDirectInputDevice8.h" diff --git a/dxwrapper.vcxproj b/dxwrapper.vcxproj index 5310fc7c..dbe0b979 100644 --- a/dxwrapper.vcxproj +++ b/dxwrapper.vcxproj @@ -1279,8 +1279,6 @@ copy /Y "$(ProjectDir)Settings\Settings.ini" "$(TargetDir)Build\dxwrapper.ini" & - - diff --git a/dxwrapper.vcxproj.filters b/dxwrapper.vcxproj.filters index 5c591718..d9f6469c 100644 --- a/dxwrapper.vcxproj.filters +++ b/dxwrapper.vcxproj.filters @@ -1868,12 +1868,6 @@ dinput8 - - dinput8 - - - dinput8 - dinput8