テキストを DirectX ゲームに描画したいので、EndPaint をフックする DLL を挿入しました。私の論理は、EndPaint は WM_PAINT 操作の最後のステップであるはずなので、フックでテキストを描画し、EndPaint を自分で呼び出すことができるというものでした。これにより、DX インターフェイスを完全に回避します。
問題は、それがまったく何もしていないことです。これが私のコードです。
#include <windows.h>
#include "Hooks.h"
static const TCHAR g_cszMessage[] = TEXT("utterly fantastic");
BOOL (WINAPI * _EndPaint)(__in HWND hWnd, __in const LPPAINTSTRUCT lpPaint) = EndPaint;
BOOL WINAPI EndPaintHook(__in HWND hWnd, __in const LPPAINTSTRUCT lpPaint)
{
// write message
TextOut(lpPaint->hdc, 0, 0, g_cszMessage, lstrlen(g_cszMessage));
GdiFlush();
// return original
return _EndPaint(hWnd, lpPaint);
}
BOOL APIENTRY DllMain(__in HINSTANCE hModule, __in DWORD fdwReason, __in __reserved LPVOID lpvReserved)
{
UNREFERENCED_PARAMETER(lpvReserved);
switch (fdwReason)
{
case DLL_PROCESS_ATTACH:
if (AttachHook(reinterpret_cast<PVOID*>(&_EndPaint), EndPaintHook))
{
DisableThreadLibraryCalls(hModule);
break;
}
return FALSE;
case DLL_PROCESS_DETACH:
DetachHook(reinterpret_cast<PVOID*>(&_EndPaint), EndPaintHook);
break;
}
return TRUE;
}
メッセージボックスを介してテストし、フックがインストールされていることを確認したため、問題がAttachHook/関数にあるのではないことはわかっています。DetachHookテキストは単に表示されていません。
誰でも何か考えがありますか?私は本当にDXインターフェースをフックしたくありません。WM_PAINT はまだ基本レベルで使用されているため、どちらの方法でも機能するはずではありませんか?
前もって感謝します。