就是这样的简单任务,还是会出错。鼠标钩子运行时,无法正常停止,只能通过注销用户结束程序。
KeyHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, glhInstance, dwThreadID );
//MouseHook = SetWindowsHookEx(WH_MOUSE, KeyboardProc, glhInstance, dwThreadID );LRESULT WINAPI KeyboardProc(int nCode,WPARAM wparam,LPARAM lparam)
{
char buffer[10];
_itoa( wparam, buffer, 10);
if (nCode < 0)
{
return CallNextHookEx(KeyHook,nCode,wparam,lparam);
}
if (nCode != HC_ACTION)
{
return CallNextHookEx(KeyHook,nCode,wparam,lparam);
}
if (!::FindWindow(0, "KeyBoard Locked"))
{
::MessageBox(0,buffer,"KeyBoard Locked",MB_OK);
}
if (m_bOperator)
{
SendMessage( m_hWndMain, AS_SENDMSG, 0, 0);
return CallNextHookEx(KeyHook, nCode, wparam, lparam );//继续传递消息
}
else
return 1;
}
KeyHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardProc, glhInstance, dwThreadID );
//MouseHook = SetWindowsHookEx(WH_MOUSE, KeyboardProc, glhInstance, dwThreadID );LRESULT WINAPI KeyboardProc(int nCode,WPARAM wparam,LPARAM lparam)
{
char buffer[10];
_itoa( wparam, buffer, 10);
if (nCode < 0)
{
return CallNextHookEx(KeyHook,nCode,wparam,lparam);
}
if (nCode != HC_ACTION)
{
return CallNextHookEx(KeyHook,nCode,wparam,lparam);
}
if (!::FindWindow(0, "KeyBoard Locked"))
{
::MessageBox(0,buffer,"KeyBoard Locked",MB_OK);
}
if (m_bOperator)
{
SendMessage( m_hWndMain, AS_SENDMSG, 0, 0);
return CallNextHookEx(KeyHook, nCode, wparam, lparam );//继续传递消息
}
else
return 1;
}
因为我做的是线程钩子,但是程序中出了问题导致没有正确的获取这个线程ID,导致鼠标“死了”。所有的程序都无法关闭,甚至连Alt+F4也束手无策。^_^