mirror of
https://gitlab.com/Mr_Goldberg/goldberg_emulator.git
synced 2024-11-14 10:50:13 +01:00
Process raw mouse events
Some games doesn't use the window proc to get the mouse events (ETS2), but it checks for raw mouse inputs.
This commit is contained in:
parent
8abb0c8bc2
commit
894300b6f4
1 changed files with 36 additions and 7 deletions
|
@ -95,6 +95,25 @@ bool IgnoreMsg(UINT uMsg)
|
|||
return false;
|
||||
}
|
||||
|
||||
void RawMouseEvent(RAWINPUT& raw)
|
||||
{
|
||||
if (raw.header.dwType == RIM_TYPEMOUSE)
|
||||
{
|
||||
if (raw.data.mouse.usButtonFlags & RI_MOUSE_LEFT_BUTTON_DOWN)
|
||||
ImGui_ImplWin32_WndProcHandler(Windows_Hook::Inst()->GetGameHwnd(), WM_LBUTTONDOWN, 0, 0);
|
||||
else if (raw.data.mouse.usButtonFlags & RI_MOUSE_LEFT_BUTTON_UP)
|
||||
ImGui_ImplWin32_WndProcHandler(Windows_Hook::Inst()->GetGameHwnd(), WM_LBUTTONUP, 0, 0);
|
||||
else if (raw.data.mouse.usButtonFlags & RI_MOUSE_MIDDLE_BUTTON_DOWN)
|
||||
ImGui_ImplWin32_WndProcHandler(Windows_Hook::Inst()->GetGameHwnd(), WM_MBUTTONDOWN, 0, 0);
|
||||
else if (raw.data.mouse.usButtonFlags & RI_MOUSE_MIDDLE_BUTTON_UP)
|
||||
ImGui_ImplWin32_WndProcHandler(Windows_Hook::Inst()->GetGameHwnd(), WM_MBUTTONUP, 0, 0);
|
||||
else if (raw.data.mouse.usButtonFlags & RI_MOUSE_RIGHT_BUTTON_DOWN)
|
||||
ImGui_ImplWin32_WndProcHandler(Windows_Hook::Inst()->GetGameHwnd(), WM_RBUTTONDOWN, 0, 0);
|
||||
else if (raw.data.mouse.usButtonFlags & RI_MOUSE_RIGHT_BUTTON_UP)
|
||||
ImGui_ImplWin32_WndProcHandler(Windows_Hook::Inst()->GetGameHwnd(), WM_RBUTTONUP, 0, 0);
|
||||
}
|
||||
}
|
||||
|
||||
LRESULT CALLBACK Windows_Hook::HookWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
|
||||
{
|
||||
Steam_Overlay* overlay = get_steam_client()->steam_overlay;
|
||||
|
@ -108,9 +127,8 @@ LRESULT CALLBACK Windows_Hook::HookWndProc(HWND hWnd, UINT uMsg, WPARAM wParam,
|
|||
// If Left Shift is pressed
|
||||
if (GetAsyncKeyState(VK_LSHIFT) & (1 << 15))
|
||||
{
|
||||
overlay->ShowOverlay(!overlay->ShowOverlay());
|
||||
if (overlay->ShowOverlay())
|
||||
show = true;
|
||||
show = !overlay->ShowOverlay();
|
||||
overlay->ShowOverlay(show);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -128,18 +146,29 @@ LRESULT CALLBACK Windows_Hook::HookWndProc(HWND hWnd, UINT uMsg, WPARAM wParam,
|
|||
|
||||
UINT WINAPI Windows_Hook::MyGetRawInputBuffer(PRAWINPUT pData, PUINT pcbSize, UINT cbSizeHeader)
|
||||
{
|
||||
if (!get_steam_client()->steam_overlay->ShowOverlay())
|
||||
if (pData == nullptr || !get_steam_client()->steam_overlay->ShowOverlay())
|
||||
return Windows_Hook::Inst()->GetRawInputBuffer(pData, pcbSize, cbSizeHeader);
|
||||
|
||||
return -1;
|
||||
int num = Windows_Hook::Inst()->GetRawInputBuffer(pData, pcbSize, cbSizeHeader);
|
||||
for (int i = 0; i < num; ++i)
|
||||
RawMouseEvent(pData[i]);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
UINT WINAPI Windows_Hook::MyGetRawInputData(HRAWINPUT hRawInput, UINT uiCommand, LPVOID pData, PUINT pcbSize, UINT cbSizeHeader)
|
||||
{
|
||||
if (!get_steam_client()->steam_overlay->ShowOverlay())
|
||||
if (pData == nullptr || !get_steam_client()->steam_overlay->ShowOverlay())
|
||||
return Windows_Hook::Inst()->GetRawInputData(hRawInput, uiCommand, pData, pcbSize, cbSizeHeader);
|
||||
|
||||
return -1;
|
||||
Windows_Hook::Inst()->GetRawInputData(hRawInput, uiCommand, pData, pcbSize, cbSizeHeader);
|
||||
|
||||
RawMouseEvent(*reinterpret_cast<RAWINPUT*>(pData));
|
||||
|
||||
//memset(pData, 0, *pcbSize);
|
||||
*pcbSize = 0;
|
||||
|
||||
return 0;
|
||||
}
|
||||
/////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
|
|
Loading…
Reference in a new issue