鼠标钩子截获鼠标滚轮信息!VC++
这几天在写一个关于鼠标勾子的程序,只想拦截鼠标滚轮并判断滚轮是上滚还是下滚.查了一些资料,没有什么进展,望兄弟帮俺一把! 所有涉及硬件控制的编程,用Windows都会很累、非常累如果你的项目不是非得锁定在Windows下,不妨换Linux试试看,会让你有一种[换了一片天地]的感觉的…… 呵呵,我WINDOWS也还用不好,用么子LINUX.
没办法,客户要用的东西,用LINUX真的说不过去.再来工程基本完成就差这点了!希望能帮上忙的兄弟协助一把!
回贴的兄弟,我都先谢了!!! 那就帮不上你了,Windows我实在没心情再捡起来用……
不过如果你的程序是通过内嵌的浏览器内核配合本地页面实现的(现在很多程序都这么做的),那倒也不难,直接用JS实现即可 kb_proc是键盘的消息出来,鼠标的你自己改一下吧。
点击此处下载 ourdev_448324.rar(文件大小:622K) (原文件名:钩子2.rar)
#define _WIN32_WINNT 0x400
#define STRICT
#define WIN32_LEAN_AND_MEAN
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
DWORD g_main_tid = 0;
HHOOK g_kb_hook = 0;
BOOL CALLBACK con_handler (DWORD)
{
PostThreadMessage (g_main_tid, WM_QUIT, 0, 0);
return TRUE;
};
LRESULT CALLBACK kb_proc (int code, WPARAM w, LPARAM l)
{
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)l;
const char *info = NULL;
if (w == WM_KEYDOWN)
info = "key dn";
else if (w == WM_KEYUP)
info = "key up";
else if (w == WM_SYSKEYDOWN)
info = "sys key dn";
else if (w == WM_SYSKEYUP)
info = "sys key up";
printf ("%s - vkCode [%04x], scanCode [%04x]\n",
info, p->vkCode, p->scanCode);
// always call next hook
return CallNextHookEx (g_kb_hook, code, w, l);
};
int main (void)
{
g_main_tid = GetCurrentThreadId ();
SetConsoleCtrlHandler (&con_handler, TRUE);
g_kb_hook = SetWindowsHookEx (
// WH_KEYBOARD_LL,
WH_MOUSE_LL,
&kb_proc,
GetModuleHandle (NULL), // 不能为NULL,否则失败
0);
if (g_kb_hook == NULL)
{
fprintf (stderr,
"SetWindowsHookEx failed with error %d\n",
::GetLastError ());
return 0;
};
// 消息循环是必须的,想知道原因可以查msdn
MSG msg;
while (GetMessage (&msg, NULL, 0, 0))
{
TranslateMessage (&msg);
DispatchMessage (&msg);
};
UnhookWindowsHookEx (g_kb_hook);
return 0;
}; http://cache.amobbs.com/bbs_upload782111/files_15/ourdev_448326.JPG
(原文件名:1.JPG) extern _declspec(dllexport) LRESULT CALLBACK WINAPI LowLevelMouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if (nCode == 0)
{
PMSLLHOOKSTRUCT l = (PMSLLHOOKSTRUCT)lParam;
if (wParam==WM_MOUSEWHEEL)
{
printf("zDelta=%d\n",l->mouseData);
}
}
return CallNextHookEx(g_kb_hook, nCode, wParam, lParam);
}
g_kb_hook=SetWindowsHookEx(WH_MOUSE_LL,LowLevelMouseProc, GetModuleHandle(NULL),0); 谢谢,非常感谢 xcm_gz
我先研究研究哈!
页:
[1]