-
Автор темы
- #1
Делаю меню для internal чита dx11. Проблема в том, что выбирать в нем я могу только во время паузы, т.е. когда присутствует игровой курсор. Видел во многих меню можно выбирать и без паузы в игре. Как это сделать? На данный момент для взаимодействия с меню использую:
Код:
class IHooks
{
private:
static HWND tWindow;
public:
static BOOLEAN KeysPressed[256];
static void Initialize(const char* Target);
static void Restore();
};
LRESULT __stdcall HookedWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);
WNDPROC OldWndProc = nullptr;
HWND IHooks::tWindow = nullptr;
BOOLEAN IHooks::KeysPressed[256] = { FALSE };
void IHooks::Initialize(const char* Target)
{
tWindow = FindWindow(0, Target);
if (tWindow) OldWndProc = (WNDPROC)SetWindowLongPtr(tWindow, GWLP_WNDPROC, (LONG_PTR)HookedWndProc);
}
void IHooks::Restore()
{
SetWindowLongPtr(tWindow, GWLP_WNDPROC, (LONG_PTR)OldWndProc);
}
LRESULT __stdcall HookedWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
ImGuiIO& io = ImGui::GetIO();
switch (uMsg)
{
case WM_LBUTTONDOWN:
io.MouseDown[0] = true;
break;
case WM_LBUTTONUP:
io.MouseDown[0] = false;
break;
case WM_RBUTTONDOWN:
io.MouseDown[1] = true;
break;
case WM_RBUTTONUP:
io.MouseDown[1] = false;
break;
case WM_MBUTTONDOWN:
io.MouseDown[2] = true;
break;
case WM_MBUTTONUP:
io.MouseDown[2] = false;
break;
case WM_MOUSEWHEEL:
io.MouseWheel += GET_WHEEL_DELTA_WPARAM(wParam) > 0 ? 1.0f : -1.0f;
break;
case WM_MOUSEMOVE:
io.MousePos.x = (signed short)(lParam);
io.MousePos.y = (signed short)(lParam >> 16);
break;
case WM_KEYDOWN:
if (wParam == 52)
break;
if (wParam < 256)
io.KeysDown[wParam] = 1;
break;
case WM_KEYUP:
if (wParam == 52)
break;
if (wParam < 256)
io.KeysDown[wParam] = 0;
break;
case WM_CHAR:
// You can also use ToAscii()+GetKeyboardState() to retrieve characters.
if (wParam > 0 && wParam < 0x10000)
io.AddInputCharacter((unsigned short)wParam);
return true;
}
return CallWindowProc(OldWndProc, hWnd, uMsg, wParam, lParam);
}