{
HWND hwnd;
hwnd=::GetForegroundWindow();
::PostMessage(hwnd,WM_CLOSE,0,0);
}
}
}
}
return CallNextHookEx(NULL, nCode, wParam, lParam);
}
这时编译程序,一共出了6个
其中前两个错是
error C2065: ''WH_KEYBOARD_LL'' : undeclared identifier
error C2065: ''PKBDLLHOOKSTRUCT'' : undeclared identifier
看看msdn 明明说可以有而且在winuser.h中定义了,我试着在KBoardHookDlg.cpp 的前面加入#include "winuser.h" ,但是结果还是一样的,我们再追根到底再看看winuser.h,发现里面明明定义了WH_KEYBOARD_LL与PKBDLLHOOKSTRUCT,但是就是不好用,怎么办呢?把它们找到,复制到KBoardHookDlg.h中原先手工加入的定义LowLevelKeyboardProc函数上面(下面就是我们要复制的代码)
#define WH_KEYBOARD_LL 13
typedef struct tagKBDLLHOOKSTRUCT {
DWORD vkCode;
DWORD scanCode;
DWORD flags;
DWORD time;
DWORD dwExtraInfo;
} KBDLLHOOKSTRUCT, FAR *LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT;
这时再编译程序,程序就可以运行了。这样我们就同样实现了改变键盘的目的。
小结,上述两种方法是不同的原理,其加载方法也不尽相同,对于第一种方法其实现可以在win98/win2000/winXP中都能通用,但对于第两种方法,其只能在win2000/win