win2k 下,使用 WH_KEYBOARD_LL 键盘钩子 ------------ hHook = ::SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, m_hInstance, 0); -------------LRESULT CALLBACK LowLevelKeyboardProc (INT nCode, WPARAM wParam, LPARAM lParam) { // By returning a non-zero value from the hook procedure, the // message does not get passed to the target window KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam; BOOL bControlKeyDown = 0; switch (nCode) { case HC_ACTION: { // Check to see if the CTRL key is pressed bControlKeyDown = GetAsyncKeyState (VK_CONTROL) >> ((sizeof(SHORT) * 8) - 1);
我也想过,但是我的程序在执行中要进行字符输入啊,搞成屏保这是不行了。以下的: 如果用键盘钩子的话,就算截获这个消息,那怎么处理这个消息,而不让Windows处理? 顺便问一下,Windows系统键的code是什么啊?
如果那位大侠知道,就列出来大家欣赏! 多谢!(包括键盘中的每个键)
------------
hHook = ::SetWindowsHookEx(WH_KEYBOARD_LL, LowLevelKeyboardProc, m_hInstance, 0);
-------------LRESULT CALLBACK LowLevelKeyboardProc (INT nCode, WPARAM wParam, LPARAM lParam)
{
// By returning a non-zero value from the hook procedure, the
// message does not get passed to the target window
KBDLLHOOKSTRUCT *pkbhs = (KBDLLHOOKSTRUCT *) lParam;
BOOL bControlKeyDown = 0; switch (nCode)
{
case HC_ACTION:
{
// Check to see if the CTRL key is pressed
bControlKeyDown = GetAsyncKeyState (VK_CONTROL) >> ((sizeof(SHORT) * 8) - 1);
// Disable CTRL+ESC
if (pkbhs->vkCode == VK_ESCAPE && bControlKeyDown)
return 1; // Disable ALT+TAB
if (pkbhs->vkCode == VK_TAB && pkbhs->flags & LLKHF_ALTDOWN)
return 1; // Disable ALT+ESC
if (pkbhs->vkCode == VK_ESCAPE && pkbhs->flags & LLKHF_ALTDOWN)
return 1; // Disable CTRL+ALT+DEL
if (pkbhs->vkCode == VK_DELETE && bControlKeyDown && pkbhs->flags & LLKHF_ALTDOWN)
return 1; // Disable WINDOWS key
if (pkbhs->vkCode == VK_LWIN || pkbhs->vkCode == VK_RWIN )
return 1; break;
} default:
break;
}
return CallNextHookEx (hHook, nCode, wParam, lParam);
}