I
invalid
Unregistered / Unconfirmed
GUEST, unregistred user!
有一个系统,设置有定时器,一段时间没有按键盘,系统会进入演示状态。
如果有键盘或鼠标动作,则计时器清0。现在问题是。系统执行一段时间(不定)后,
不知怎么,windows识别不了双击,回车也不能用来,具体就是点击开始菜单上的程序,
不执行,双击桌面图标也不执行,按回车也不行,在资源管理器中一样。只有用运行
中输入命令才可以。
不管我的系统是否结束,这种情况都有可能发生。在多个计算机都有这种情况。
具体关键代码如下。
// 用于保存键盘和鼠标事件的回调句柄
HHOOK ATCKeyboardProc,ATCMouseProc;
// 重定义键盘事件处理函数:重置超时计数
LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam)
{
if(code>=0){
timerOverTime->Enabled=false;
timerOverTime->Enabled=true;
}
return CallNextHookEx(ATCKeyboardProc,code,wParam,lParam);
}
// 重定义鼠标事件处理函数:重置超时计数
LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(nCode>=0){
timerOverTime->Enabled=false;
timerOverTime->Enabled=true;
}
return CallNextHookEx(ATCMouseProc,nCode,wParam,lParam);
}
程序启动时调用,初始化环境
void _fastcall InitAll(int app)
{
int ret;
time_t t;
DWORD threadid;
// 超时计数器
timerOverTime=new TATCOverTimer(NULL);
timerOverTime->Interval=120000;
threadid=GetWindowThreadProcessId(Application->Handle,NULL);
// 设置键盘事件的回调函数,返回该回凋函数的句柄
ATCKeyboardProc=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,NULL,threadid);
// 设置鼠标事件的回调函数,返回该回凋函数的句柄
ATCMouseProc=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseProc,NULL,threadid);
}
程序结束时调用,释放回调函数。
void _fastcall FreeAll()
{
delete timerOverTime;
// 恢复原键盘和鼠标事件的回掉函数
UnhookWindowsHookEx(ATCMouseProc);
UnhookWindowsHookEx(ATCKeyboardProc);
}
如果有键盘或鼠标动作,则计时器清0。现在问题是。系统执行一段时间(不定)后,
不知怎么,windows识别不了双击,回车也不能用来,具体就是点击开始菜单上的程序,
不执行,双击桌面图标也不执行,按回车也不行,在资源管理器中一样。只有用运行
中输入命令才可以。
不管我的系统是否结束,这种情况都有可能发生。在多个计算机都有这种情况。
具体关键代码如下。
// 用于保存键盘和鼠标事件的回调句柄
HHOOK ATCKeyboardProc,ATCMouseProc;
// 重定义键盘事件处理函数:重置超时计数
LRESULT CALLBACK KeyboardProc(int code,WPARAM wParam,LPARAM lParam)
{
if(code>=0){
timerOverTime->Enabled=false;
timerOverTime->Enabled=true;
}
return CallNextHookEx(ATCKeyboardProc,code,wParam,lParam);
}
// 重定义鼠标事件处理函数:重置超时计数
LRESULT CALLBACK MouseProc(int nCode,WPARAM wParam,LPARAM lParam)
{
if(nCode>=0){
timerOverTime->Enabled=false;
timerOverTime->Enabled=true;
}
return CallNextHookEx(ATCMouseProc,nCode,wParam,lParam);
}
程序启动时调用,初始化环境
void _fastcall InitAll(int app)
{
int ret;
time_t t;
DWORD threadid;
// 超时计数器
timerOverTime=new TATCOverTimer(NULL);
timerOverTime->Interval=120000;
threadid=GetWindowThreadProcessId(Application->Handle,NULL);
// 设置键盘事件的回调函数,返回该回凋函数的句柄
ATCKeyboardProc=SetWindowsHookEx(WH_KEYBOARD,(HOOKPROC)KeyboardProc,NULL,threadid);
// 设置鼠标事件的回调函数,返回该回凋函数的句柄
ATCMouseProc=SetWindowsHookEx(WH_MOUSE,(HOOKPROC)MouseProc,NULL,threadid);
}
程序结束时调用,释放回调函数。
void _fastcall FreeAll()
{
delete timerOverTime;
// 恢复原键盘和鼠标事件的回掉函数
UnhookWindowsHookEx(ATCMouseProc);
UnhookWindowsHookEx(ATCKeyboardProc);
}