判断是否按下某键

第一种,检测键盘状态

 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");
    }
}

 

 

 

 

 

 

 

posted @ 2013-08-04 19:58  GOD攀  阅读(634)  评论(0)    收藏  举报