簡體   English   中英

我該如何防止(winapi鍵盤鈎鈎住keybd_event)?

[英]how can i prevent (winapi keyboard hook hooking keybd_event)?

首先,對不起我的英語! 嗨,大家好,我想按一下[x]然后按[ax],這是代碼-----------------

#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->發送ax->也迷上了x->發送ax ----------循環,我真的很菜,也許還有很多其他代碼需要改進。 給我您學習C ++的建議:)感謝您的閱讀!

看看這個你也許可以使用額外的信息參數指定,如果這是你自己的X模擬,以防止環路

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM