C/C++

Windows C++ 键盘钩子

HHOOK hook = SetWindowsHookEx(WH_KEYBOARD_LL,LowLevelKeyboardProc,GetModuleHandle(NULL),0);

//WH_KEYBOARD 在应用程序中,WH_KEYBOARD Hook用来监视WM_KEYDOWN and WM_KEYUP消息,这些消息通过GetMessage or PeekMessage function返回。可以使用这个Hook来监视输入到消息队列中的键盘消息。
//HookProc是回调函数名。

//nCode参数是Hook代码,Hook子程使用这个参数来确定任务。这个参数的值依赖于Hook类型,每一种Hook都有自己的Hook代码特征字符集。

//wParam和lParam参数的值依赖于Hook代码,但是它们的典型值是包含了关于发送或者接收消息的信息。
LRESULT CALLBACK HookProc(int nCode,WPARAM wParam,LPARAM lParam ){
? ? if(!nCode){
? ? ? ? printf("%d %d %d %d %d %d ?%d %d %d %d",
			((PMSG)lParam)->hwnd,
			((PMSG)lParam)->lParam,
			((PMSG)lParam)->message,
			((PMSG)lParam)->pt,
			((PMSG)lParam)->time,
			((PMSG)lParam)->wParam,
			((PCWPSTRUCT)lParam)->hwnd,
			((PCWPSTRUCT)lParam)->lParam,
			((PCWPSTRUCT)lParam)->message,
			((PCWPSTRUCT)lParam)->wParam
			);
? ? }
? ? return CallNextHookEx(hook,nCode,wParam,lParam);
}

//PMSG 介绍 : http://msdn.microsoft.com/zh-cn/dynamics/ms644958%28v=vs.80%29.aspx
/*
hwnd
? ? Type: HWND
? ? 句柄到窗口的窗口过程接收消息。该成员为NULL时,该消息是一个线程的消息。
message
? ? Type: UINT
? ? 消息标识符。应用程序只能使用低字;高字被系统保留。
wParam
? ? Type: WPARAM
? ? 有关消息的其他信息。的确切含义取决于消息成员的值。
lParam
? ? Type: LPARAM
? ? 有关消息的其他信息。的确切含义取决于消息成员的值。
time
? ? Type: DWORD
? ? 在该消息发布的时间。
pt
? ? Type: POINT
? ? 光标位置,在屏幕坐标,当消息被张贴。
*/
//CWPSTRUCT介绍 http://msdn.microsoft.com/zh-cn/biztalk/ms644964%28v=vs.80%29
/*
lParam
? ? Type: LPARAM
? ? 有关消息的其他信息。的确切含义取决于消息值。
wParam
? ? Type: WPARAM
? ? 有关消息的其他信息。的确切含义取决于消息值。
message
? ? Type: UINT
? ? 该消息。
hwnd
? ? Type: HWND
? ? 来接收消息的窗口句柄
*/
?

Image

0 条评论

发表评论

你需要登录后才可进行发表