判断是否按下某键
第一种,检测键盘状态
1 hThread=CreateThread(NULL,0,(LPTHREAD_START_ROUTINE)MyHokey,NULL,0,&ThreadID); 2 //////////////////////////////////////////////////////////////////////////////////////////////////// 3 DWORD WINAPI MyHokey (LPVOID pParam) 4 { 5 Tloop: 6 if(GetKeyState(VK_F1)<0) 7 { 8 Sleep(100); 9 } 10 if(GetKeyState(VK_F2)<0) 11 { 12 Sleep(100); 13 } 14 if(GetKeyState(VK_F3)<0) 15 { 16 Sleep(100); 17 } 18 if(GetKeyState(VK_F4)<0) 19 { 20 Sleep(100); 21 } 22 if(GetKeyState(VK_F5)<0) 23 { 24 Sleep(100); 25 } 26 if(GetKeyState(VK_F6)<0) 27 { 28 Sleep(100); 29 } 30 if(GetKeyState(VK_F7)<0) 31 { 32 Sleep(100); 33 } 34 if(GetKeyState(VK_F8)<0) 35 { 36 Sleep(100); 37 } 38 Sleep(50); 39 __asm jmp Tloop 40 return 0; 41 }
第二种键盘Hook
以修改标题为例
///////////////////////////////////////////////////////////////////////////// #define WH_KEYBOARD_LL 13 typedef struct tagKBDLLHOOKSTRUCT { DWORD vkCode; DWORD scanCode; DWORD flags; DWORD time; DWORD dwExtraInfo; } KBDLLHOOKSTRUCT, FAR *LPKBDLLHOOKSTRUCT, *PKBDLLHOOKSTRUCT; int MyCount = 0; LRESULT CALLBACK KeyboardProc( int code, // hook code WPARAM wParam, // virtual-key code LPARAM lParam // keystroke-message information ) { AFX_MANAGE_STATE(AfxGetStaticModuleState()); LPKBDLLHOOKSTRUCT pKB = (LPKBDLLHOOKSTRUCT)lParam; if (code == HC_ACTION) { if ((pKB->vkCode == VK_F4)) { if (GetKeyState(VK_F4)<0) { MyCount ++; CString check; check.Format("按下F4次数为: %d",MyCount); AfxGetMainWnd()->SetWindowText(check); } } } return CallNextHookEx(0,code,wParam,lParam); } void CMyForm::OnButton1() //快捷键测试 { HHOOK IsHook= ::SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc,AfxGetApp()->m_hInstance, 0); if (IsHook == 0) { AfxMessageBox("error003"); } }
浙公网安备 33010602011771号