- Статус
- Оффлайн
- Регистрация
- 13 Фев 2026
- Сообщения
- 600
- Реакции
- 16
Наткнулся на полезную базу для тех, кто хочет пересесть с internal-паст на полноценные внешние решения. Основная проблема новичков при создании External меню на DX11 — это правильная инициализация «холста» и работа с прозрачностью так, чтобы и картинка была, и клики регистрировались.
Ниже представлен скелет приложения на C++, который заводит ImGui контекст в связке с DirectX 11. Это чистый пример, на основе которого можно строить свой оверлей для ESP или полноценного меню конфигурации.
Основной блок инициализации и WndProc:
Нюансы с прозрачностью и кликами:
Многие сталкиваются с тем, что окно либо невидимо, либо сквозь него не проходят клики (или наоборот — нельзя нажать на кнопки меню). В external софте критично правильно манипулировать стилями окна через SetWindowLong.
Технические заметки:
— Используйте SwapEffect = DXGI_SWAP_EFFECT_DISCARD для старых систем или FLIP_DISCARD для Win10+, если хотите меньше инпут-лага.
— Обязательно чекайте DXGI_STATUS_OCCLUDED, чтобы не нагружать видяху лишней отрисовкой, когда игра свернута или экран заблокирован.
— Для легитности оверлея лучше вешаться на существующее окно (например, Discord Overlay или NVIDIA Overlay), но как база для обучения этот код — мастхэв.
Кто как решает вопрос с захватом инпута во внешних меню, чтобы не триггерить лишний раз античит постоянным переключением фокуса окна?
Ниже представлен скелет приложения на C++, который заводит ImGui контекст в связке с DirectX 11. Это чистый пример, на основе которого можно строить свой оверлей для ESP или полноценного меню конфигурации.
Основной блок инициализации и WndProc:
Код:
#include "imgui.h"
#include "imgui_impl_win32.h"
#include "imgui_impl_dx11.h"
#include <d3d11.h>
#include <tchar.h>
// Forward declarations
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
extern IMGUI_IMPL_API LRESULT ImGui_ImplWin32_WndProcHandler(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
// Логика обработки сообщений
LRESULT WINAPI WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
{
if (ImGui_ImplWin32_WndProcHandler(hWnd, msg, wParam, lParam))
return true;
switch (msg)
{
case WM_SIZE:
return 0;
case WM_SYSCOMMAND:
if ((wParam & 0xfff0) == SC_KEYMENU) return 0;
break;
case WM_DESTROY:
::PostQuitMessage(0);
return 0;
}
return ::DefWindowProcW(hWnd, msg, wParam, lParam);
}
Нюансы с прозрачностью и кликами:
Многие сталкиваются с тем, что окно либо невидимо, либо сквозь него не проходят клики (или наоборот — нельзя нажать на кнопки меню). В external софте критично правильно манипулировать стилями окна через SetWindowLong.
- Чтобы сделать окно прозрачным для античита и глаза, используем WS_EX_LAYERED.
- Если нужно, чтобы клики пролетали сквозь оверлей на саму игру (когда меню закрыто), добавляем WS_EX_TRANSPARENT.
- Для работы курсора в самом ImGui стиле, это флаг нужно динамически снимать (через переключение стилей окна), иначе ваш курсор будет бесполезен.
Код:
SetWindowPos(hwnd, HWND_TOPMOST, 0, 0, 0, 0, SWP_NOMOVE | SWP_NOSIZE | SWP_SHOWWINDOW);
SetWindowLong(hwnd, GWL_EXSTYLE, WS_EX_LAYERED | WS_EX_TRANSPARENT | WS_EX_NOACTIVATE);
// Не забывайте про DwmExtendFrameIntoClientArea для корректного альфа-канала
Технические заметки:
— Используйте SwapEffect = DXGI_SWAP_EFFECT_DISCARD для старых систем или FLIP_DISCARD для Win10+, если хотите меньше инпут-лага.
— Обязательно чекайте DXGI_STATUS_OCCLUDED, чтобы не нагружать видяху лишней отрисовкой, когда игра свернута или экран заблокирован.
— Для легитности оверлея лучше вешаться на существующее окно (например, Discord Overlay или NVIDIA Overlay), но как база для обучения этот код — мастхэв.
Кто как решает вопрос с захватом инпута во внешних меню, чтобы не триггерить лишний раз античит постоянным переключением фокуса окна?