我想做一个用户自定义热键和时间,然后响应的程序。(类似按键精灵)
但是出现了一个问题,就是我的程序只能在对话框中响应开启热键的行为。其他程序不响应。
我用的是vs2010 hotkey 控件。
附上代码:
void CkeyboardDlg::OnTimer(UINT_PTR nIDEvent)
{
// TODO: 在此添加消息处理程序代码和/或调用默认值
UpdateData(TRUE);
if (nIDEvent==1)  //模拟键盘按下

keybd_event(m_hotkey1.GetHotKey(),0,0,0);  //获取hotkey1的热键,键值,按下。
keybd_event(m_hotkey1.GetHotKey(),0,KEYEVENTF_KEYUP,0);  //弹起
}
if (nIDEvent==2)  //模拟键盘按下

keybd_event(m_hotkey2.GetHotKey(),0,0,0);
keybd_event(m_hotkey2.GetHotKey(),0,KEYEVENTF_KEYUP,0);
}
if (nIDEvent==3)  //模拟键盘按下

keybd_event(m_hotkey3.GetHotKey(),0,0,0);
keybd_event(m_hotkey3.GetHotKey(),0,KEYEVENTF_KEYUP,0);
}
if (nIDEvent==4)   //模拟键盘按下

keybd_event(m_hotkey4.GetHotKey(),0,0,0);
keybd_event(m_hotkey4.GetHotKey(),0,KEYEVENTF_KEYUP,0);
}
if (nIDEvent==5)   //模拟键盘按下

keybd_event(m_hotkey5.GetHotKey(),0,0,0);
keybd_event(m_hotkey5.GetHotKey(),0,KEYEVENTF_KEYUP,0);
}
if (nIDEvent==6)
{ }
UpdateData(FALSE);
CDialogEx::OnTimer(nIDEvent);
}BOOL CkeyboardDlg::PreTranslateMessage(MSG* pMsg)
{
// TODO: 在此添加专用代码和/或调用基类
 UpdateData(TRUE);  
 if ((pMsg->message == WM_KEYDOWN) || (pMsg->message == WM_SYSKEYDOWN))
 {
 if (pMsg->wParam == m_hotbegin.GetHotKey())  //如果是开始热键被按下则
 {
 SetTimer(5,m_ntime5,NULL);            //设置定时器(运行定时器5,热键时间)
 SetTimer(4,m_ntime4,NULL); 
 SetTimer(3,m_ntime3,NULL);
 SetTimer(2,m_ntime2,NULL);
 SetTimer(1,m_ntime1,NULL);
 KillTimer(6);                   //停止定时器6
 }
 if (pMsg->wParam == m_hotend.GetHotKey())
 {
 KillTimer(1);                    //结束定时器
 KillTimer(2);   //结束定时器
 KillTimer(3);
 KillTimer(4);
 KillTimer(5);
 SetTimer(6,10,NULL);             //使定时器6生效
 }
 }

 UpdateData(FALSE);
return CDialogEx::PreTranslateMessage(pMsg);
}我怀疑是我的PreTranslateMessage处理有问题。请高手给我指点一下。万分感谢。