static HHOOK s_hHook = NULL; // HOOK句柄
BOOL CDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// TODO: Add extra initialization here
s_hDialog = GetSafeHwnd();
s_hHook = SetWindowsHookEx(WH_KEYBOARD, KeyboardHookProc, NULL, GetCurrentThreadId());
return TRUE; // return TRUE unless you set the focus to a control
// EXCEPTION: OCX Property Pages should return FALSE
}
BOOL CDlg::DestroyWindow()
{
// TODO: Add your specialized code here and/or call the base class
UnhookWindowsHookEx(s_hHook);
return CDialog::DestroyWindow();
}
LRESULT CALLBACK CDlg::KeyboardHookProc(int code, WPARAM wParam, LPARAM lParam)
{
if(code < 0)
{
return CallNextHookEx(s_hHook, code, wParam, lParam);
}
if(wParam == VK_RETURN)
{
if(IsWindow(s_hDialog))
{
if((1 << 30) & lParam)// 键盘按下
{
UINT ID = (GetFocus())->GetDlgCtrlID();
::PostMessage(s_hDialog, WM_COMMAND, ID, 0);
}
}
//return 1;
}
return CallNextHookEx(s_hHook, code, wParam, lParam);
}