gpt4 book ai didi

c++ - DLL和绘图功能消失

转载 作者:太空宇宙 更新时间:2023-11-04 13:41:25 25 4
gpt4 key购买 nike

main.cpp (dll) http://pastebin.com/Z811YSz7Funkcje.h http://pastebin.com/siZrUBh0当我将此 dll 注入(inject)游戏时,我看不到字母。当我在一段时间内完成绘图功能时(1),字母会出现和消失。如何让绘图功能一直在这个游戏的最前面。

    #include <windows.h>
#include <vector>
#include "Funkcje.h"
#include <cstdio>
#include <string>

BOOL WINAPI DllMain(
HINSTANCE hinstDLL,
DWORD fdwreason,
LPVOID lpReversed)
{
switch (fdwreason)
{
case DLL_PROCESS_ATTACH:
PAINTSTRUCT ps;
HDC hdc;
for (size_t i = 0; i < getToplevelWindows().size(); i++){
hdc = GetDC(getToplevelWindows()[i]);
TextOut(hdc, 150, 150, L"TEST", 4);
ReleaseDC(getToplevelWindows()[i], hdc);
}
break;
}

return TRUE;
}

最佳答案

DllMain仅在加载 DLL 时调用一次。这不是您应该放置代码的地方。

为了将代码正确地“注入(inject)”到进程中(通过 DLL 或任何其他方式),您必须首先确定您要 Hook 的进程中的哪个函数或事件。

在这种情况下,我想你想 Hook 窗口事件 WM_PAINT ,从系统发送到窗口过程的回调告诉它它应该出于任何原因重新绘制其内容。 (虽然这可能并不总是正确的,因为程序可以使用其他方法来更新窗口内容。)

所以你要做的就是找到你想要 Hook 的窗口句柄,并用你自己的回调过程替换它:

WNDPROC originalProc = SetWindowLongPtr(hWnd, GWLP_WNDPROC, (LONG_PTR)myHookProc);

当然,在拥有 myHookProc 之前不会定义并完成它的 Hook 工作 WM_PAINT :

LRESULT CALLBACK myHookProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
LRESULT originalResult = originalProc(hWnd, uMsg, wParam, lParam); // call original first
if (uMsg == WM_PAINT)
{
PAINTSTRUCT ps;
HDC hdc = GetDC(hWnd);
TextOut(hdc, 150, 150, L"TEST", 4);
ReleaseDC(hWnd, hdc);
}
return originalResult;
}

如果您要处理多个窗口,您可能需要使用 std::unordered_map<HWND, WNDPROC>保持每个窗口句柄与其原始过程之间的关系。

关于c++ - DLL和绘图功能消失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27573072/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com