首页
社区
课程
招聘
[旧帖] [求助]全局钩子在HookProc中调用SetCursorPos()无效 0.00雪花
发表于: 2012-6-28 17:05 1760

[旧帖] [求助]全局钩子在HookProc中调用SetCursorPos()无效 0.00雪花

2012-6-28 17:05
1760
测试时是写了个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作者讲授!

收藏
免费 0
支持
分享
最新回复 (1)
雪    币: 1689
活跃值: (379)
能力值: ( LV15,RANK:440 )
在线值:
发帖
回帖
粉丝
2
你在任何情况下,回调都返回0,这可能是问题的原因,因为SetCursor也要通过鼠标低级钩子处理的。

注意在适当的时候调用:CallNextHookEx 让系统处理你不感兴趣的消息。
2012-6-28 19:26
0
游客
登录 | 注册 方可回帖
返回
//