2014-12-20 214 views
1

我的DLL挂钩与DLL游戏钩

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

WNDPROC originalProc; 
LRESULT CALLBACK myHookProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam); 

BOOL WINAPI DllMain(
    HINSTANCE hinstDLL, 
    DWORD fdwreason, 
    LPVOID lpReversed) 
{ 
    switch (fdwreason) 
    { 
    case DLL_PROCESS_ATTACH: 
     WNDPROC originalProc = SetWindowLongPtr(getToplevelWindows()[1], GWLP_WNDPROC, (LONG_PTR)myHookProc); 
     break; 
    } 

    return TRUE; 
} 

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; 
} 

Funkcje.h http://pastebin.com/dc5t5H8s

我有一个问题(LONG_PTR)myHookProc 我的编译器认为错误C2440:初始化:不能转换从'长'到'WNDPROC' 我没有任何想法我现在可以做什么。如果没有(LONG_PTR)我的编译器说,他无法从 'LRESULT' 转换为 'LONG'

+0

你应该明确地转换SetWindowLongPtr的返回值:'originalProc =(WNDPROC)SetWindowLongPtr(getToplevelWindows()[1],GWLP_WNDPROC,(LONG_PTR)myHookProc);'。另外,如果你想在以后访问originalProc,你不应该在'case DLL_PROCESS_ATTACH'的上下文中创建另一个变量...... –

回答

0

更改签名:

LRESULT APIENTRY myHookProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam) 

和呼叫到:

WNDPROC originalProc = (WNDPROC)SetWindowLongPtr(getToplevelWindows()[1], GWLP_WNDPROC, (LONG_PTR)myHookProc); 
+0

我做到了,所以http://pastebin.com/iBZJrfs2它不工作。它只会让我的游戏崩溃。 – VereX

+0

但编译错误消失了,对吧? – karlphillip

+0

是的,现在没有编译错误。 – VereX