-
-
[旧帖]
[求助]全局钩子在HookProc中调用SetCursorPos()无效
0.00雪花
-
发表于:
2012-6-28 17:05
1760
-
[旧帖] [求助]全局钩子在HookProc中调用SetCursorPos()无效
0.00雪花
测试时是写了个win32窗口,在winmain之初loadlibrary
调试dll项目时,是已经进入的,但就是SetCursorPos无效
DLL代码如下
#include <Windows.h>
#pragma data_seg("shared")
HINSTANCE g_Instance = NULL;
HHOOK g_Hook = NULL;
HWND g_hWnd = NULL;
#pragma data_seg()
#pragma comment(linker,"/SECTION:shared,RWS")
DWORD g_ThreadId = 0;
int g_EventCode = WH_MOUSE_LL;
LRESULT CALLBACK HookMouseLLProc(int nCode, WPARAM wParam, LPARAM lParam);
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{
g_Instance = (HINSTANCE)hModule;
switch (ul_reason_for_call)
{
case DLL_PROCESS_ATTACH:
g_Hook = SetWindowsHookEx(g_EventCode, HookMouseLLProc, g_Instance, g_ThreadId);
if (g_Hook==NULL)
{
int err = GetLastError();
MessageBoxW(NULL, L"SetHook失败!", L"错误", 0);
break;
}
MessageBoxW(NULL, L"载入CursorMonitor!", L"信息", 0);
break;
case DLL_PROCESS_DETACH:
if (g_Hook)
{
UnhookWindowsHookEx(g_Hook);
}
MessageBoxW(NULL, L"卸载CursorMonitor!", L"信息", 0);
break;
case DLL_THREAD_ATTACH:
break;
case DLL_THREAD_DETACH:
break;
}
return (TRUE);
}
LRESULT CALLBACK HookMouseLLProc(int nCode, WPARAM wParam, LPARAM lParam)
{
switch (nCode)
{
case HC_ACTION: // 0
{
if (wParam==WM_MOUSEMOVE)
{
int x=((PMSLLHOOKSTRUCT)lParam)->pt.x;
int y=((PMSLLHOOKSTRUCT)lParam)->pt.y;
WCHAR title[64];
if( x< 200)
{
x = 200;
SetCursorPos(x,y); // 就是这里。。。。
}
wsprintfW(title, L"Cursor: (%d, %d)", x, y);
SetWindowTextW(g_hWnd, title);
}
}
break;
case HC_GETNEXT: // 1
break;
case HC_SKIP: // 2
break;
case HC_NOREMOVE: // HC_NOREM:HC_NOREMOVE 3
break;
case HC_SYSMODALON :// 4
break;
case HC_SYSMODALOFF :// 5
break;
default:
break;
}
return 0;
}
[课程]FART 脱壳王!加量不加价!FART作者讲授!