-
Автор темы
- #1
Доброго времени суток, сделал базовое ImGui меню на c++ для кс го. После инжекта в игру обнаружил что окно imgui пропускает клики в игру. Например нажимаю на пустое место в ImGui и в это время игра тоже регистрирует клик в этой области. Как избавится от этого?
Код:
Код:
C++:
#include "includes.h"
typedef long(__stdcall* EndScene)(LPDIRECT3DDEVICE9);
static EndScene oEndScene = NULL;
static WNDPROC oWndProc;
static HWND window = NULL;
extern LRESULT ImGui_ImplWin32_WndProcHandler(HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam);
ImFont* defolt;
ImFont* Logo;
ImFont* Button;
void InitImGui(LPDIRECT3DDEVICE9 pDevice) {
ImGui::CreateContext();
ImGuiIO& io = ImGui::GetIO();
defolt = io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\Arial.ttf", 24, NULL, io.Fonts->GetGlyphRangesCyrillic());
Logo = io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\Arial.ttf", 72, NULL, io.Fonts->GetGlyphRangesCyrillic());
Button = io.Fonts->AddFontFromFileTTF("C:\\Windows\\Fonts\\Arial.ttf", 32, NULL, io.Fonts->GetGlyphRangesCyrillic());
io.ConfigFlags = ImGuiConfigFlags_NoMouseCursorChange;
ImGui_ImplWin32_Init(window);
ImGui_ImplDX9_Init(pDevice);
}
bool init = false;
bool openmenu = false;
long __stdcall hkEndScene(LPDIRECT3DDEVICE9 pDevice)
{
if (!init) {
InitImGui(pDevice);
init = true;
}
// open menu
if (GetAsyncKeyState(VK_INSERT) & 1) {
openmenu = !openmenu;
}
if (openmenu == true) {
ImGui_ImplDX9_NewFrame();
ImGui_ImplWin32_NewFrame();
ImGui::NewFrame();
ImGui::SetNextWindowSize(ImVec2(800, 450));
ImGui::Begin(" ",nullptr, ImGuiWindowFlags_NoCollapse | ImGuiWindowFlags_NoResize);
ImGui::PushFont(Logo);
ImGui::SetCursorPosX(23);
ImGui::TextColored(ImVec4(0.23f, 0.23f, 0.23f, 1.0f), "FL");
ImGui::PopFont();
ImGui::PushFont(Button);
ImGui::PushStyleColor(ImGuiCol_Button, (ImVec4)ImColor(0.32f,0.32f,0.32f));
ImGui::PushStyleColor(ImGuiCol_ButtonHovered, (ImVec4)ImColor(0.32f, 0.32f, 0.32f));
ImGui::PushStyleColor(ImGuiCol_ButtonActive, (ImVec4)ImColor(0.32f, 0.32f, 0.32f));
ImGui::SetCursorPosY(120);
ImGui::SetCursorPosX(15);
ImGui::Button(" Legit ",ImVec2(120.0f,70.0f));
ImGui::SetCursorPosY(200);
ImGui::SetCursorPosX(15);
ImGui::Button("Anti-Aim", ImVec2(120.0f, 70.0f));
ImGui::SetCursorPosY(280);
ImGui::SetCursorPosX(15);
ImGui::Button(" Visual ", ImVec2(120.0f, 70.0f));
ImGui::SetCursorPosY(360);
ImGui::SetCursorPosX(15);
ImGui::Button(" Misk ", ImVec2(120.0f, 70.0f));
ImGui::PopStyleColor(3);
ImGui::PopFont();
ImGui::PushFont(defolt);
ImGui::PopFont();
ImGui::End();
ImGui::EndFrame();
ImGui::Render();
ImGui_ImplDX9_RenderDrawData(ImGui::GetDrawData());
}
return oEndScene(pDevice);
}
LRESULT _stdcall WndProc(const HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam) {
if (true && ImGui_ImplWin32_WndProcHandler(hwnd, uMsg, wParam, lParam))
return true;
return CallWindowProc(oWndProc, hwnd, uMsg, wParam, lParam);
}
BOOL CALLBACK EnumWindowsCallBack(HWND handle, LPARAM lParam) {
DWORD procID;
GetWindowThreadProcessId(handle, &procID);
if (GetCurrentProcessId() != procID)
return TRUE;
window = handle;
return false;
}
HWND GetProcessWindow() {
window = NULL;
EnumWindows(EnumWindowsCallBack, NULL);
return window;
}
int mainThread()
{
if (kiero::init(kiero::RenderType::D3D9) == kiero::Status::Success)
{
kiero::bind(42, (void**)&oEndScene, hkEndScene);
window = GetProcessWindow();
oWndProc = (WNDPROC)SetWindowLongPtr(window, GWL_WNDPROC, (LONG_PTR)WndProc);
}
return 0;
}
BOOL WINAPI DllMain(HINSTANCE hInstance, DWORD fdwReason, LPVOID)
{
DisableThreadLibraryCalls(hInstance);
if (fdwReason == DLL_PROCESS_ATTACH) {
CloseHandle(CreateThread(NULL, 0, (LPTHREAD_START_ROUTINE)mainThread, NULL, 0, NULL));
}
return TRUE;
}
Последнее редактирование: