我怎么能阻止(winapi键盘挂钩keybd_event)?

时间:2017-04-10 11:47:23

标签: c++

首先,对不起我的英文! 嗨伙计们,我想做点什么 当我按“x”然后“斧头” 这是代码-----------------

#include "stdafx.h"
using namespace std;

HHOOK hKBHook;

UINT TimerId;
UINT TimerId1;

VOID CALLBACK DelayX(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime) {
    keybd_event(65, 0, WM_KEYDOWN, 0);
    keybd_event(65, 0, WM_KEYUP, 0);
    keybd_event(88, 0, WM_KEYDOWN, 0);
    keybd_event(88, 0, WM_KEYUP, 0);
    KillTimer(NULL, TimerId);
}

VOID CALLBACK XSPlay(HWND hWnd, UINT nMsg, UINT nIDEvent, DWORD dwTime) {
    PlaySound(TEXT("tocks.wav"), NULL, SND_ASYNC);
    KillTimer(NULL, TimerId1);
}

LRESULT CALLBACK KeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
    if (wParam == WM_KEYDOWN)
    {
        PKBDLLHOOKSTRUCT pKey = (PKBDLLHOOKSTRUCT)lParam;
        cout << pKey->vkCode << " ";
        switch (pKey->vkCode)
        {
            case 88:
            {
                PlaySound(TEXT("tocks.wav"), NULL, SND_ASYNC);
                KillTimer(NULL, TimerId1);
                TimerId1 = SetTimer(NULL, 0, 297, &XSPlay);
                TimerId = SetTimer(NULL, 0, 290, &DelayX);
        return 1;
            }
            case 19:
            {
                UnhookWindowsHookEx(hKBHook);
                return 1;
            }
        }
    }
    CallNextHookEx(hKBHook, nCode, wParam, lParam);
    return 0;
}

int _tmain(int argc, _TCHAR* argv[]) {
    HMODULE hInstance = GetModuleHandle(NULL);
    hKBHook = SetWindowsHookEx(WH_KEYBOARD_LL, KeyboardProc, hInstance, NULL);
    MSG Msg;

    while (GetMessage(&Msg, NULL, 0, 0)) {DispatchMessage(&Msg);}

    UnhookWindowsHookEx(hKBHook);

    return 0;
}
问题是 按x - &gt;发送斧头 - &gt;也迷上了这个x - &gt;发送斧头----------循环 而我真的是诺布 也许许多其他代码需要改进。 给我你学习C ++的建议:) 谢谢你的阅读!

1 个答案:

答案 0 :(得分:0)

看看this您可以使用额外的info参数来指定这是否是您自己的X模拟以防止循环