好像不行,callback和winapi在windef.h中都是__stdcall,而且我试过了,结果没区别,在msdn中mouseproc的定义就是
LRESULT CALLBACK MouseProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
);
请赐教!!!
LRESULT CALLBACK MouseProc(
int nCode, // hook code
WPARAM wParam, // message identifier
LPARAM lParam // mouse coordinates
);
请赐教!!!
还有全局hook必须在dll中的。
#include <Windows.h>
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
LRESULT CALLBACK LowLevelKeyboardProc(int nCode,
WPARAM wParam, LPARAM lParam) { BOOL fEatKeystroke = FALSE;
PKBDLLHOOKSTRUCT p;
if (nCode == HC_ACTION) {
switch (wParam) {
case WM_KEYDOWN: case WM_SYSKEYDOWN:
case WM_KEYUP: case WM_SYSKEYUP:
p = (PKBDLLHOOKSTRUCT) lParam;
fEatKeystroke =
( (p->vkCode == VK_TAB) && ((p->flags & LLKHF_ALTDOWN) != 0) ) ||
( (p->vkCode == VK_ESCAPE) && ((p->flags & LLKHF_ALTDOWN) != 0) ) ||
( (p->vkCode == VK_ESCAPE) && ((GetKeyState(VK_CONTROL) & 0x8000) != 0) )||
( (p->vkCode == 46) && ( (p->flags & LLKHF_ALTDOWN) != 0 ) &&
( (GetKeyState(VK_CONTROL) & 0x8000) != 0));
//its possible to add other keys....
//the 46 means del
break;
}
}
// return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam, lParam));
return;
}
///////////////////////////////////////////////////////////////////////////////int APIENTRY WinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPSTR lpCmdLine,
int nCmdShow)
{ // Install the low-level keyboard & mouse hooks
HHOOK hhkLowLevelKybd = SetWindowsHookEx(WH_KEYBOARD_LL,
LowLevelKeyboardProc, hInstance, 0); // Keep this app running until we're told to stop
MessageBox(NULL,
TEXT("Alt+Esc, Ctrl+Esc, and Alt+Tab are now not working.\n"),
TEXT("Disable Low-Level Keys"), MB_OK);
UnhookWindowsHookEx(hhkLowLevelKybd); return(0);
}
此源码中断对一些系统键的响应,我将callnexthookex删掉,虽然报了一个warning,但可以实现屏蔽键盘,我想鼠标也应当可以。高档菜鸟,你说得我不同意,我安了hook之后,我的hook自动在hook栈的最上方,所以我最先收到消息,只要我不调用callnexthookex,高层应用就收不到消息了,你看看msdn吧!!!