![](/img/trans.png)
[英]Global keyboard hook with WH_KEYBOARD_LL and keybd_event (windows)
[英]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.