VC++ 键盘钩子 重定义键码
您好,上个问题没追加成分数,也不好再在底下追问。只好另开一个问题来请教,顺便给分数。请问可否将您说的这段“如果你只是想把A键的动作变化成B键动作,即把A的键码改成B的键码...
您好,上个问题没追加成分数,也不好再在底下追问。只好另开一个问题来请教,顺便给分数。请问可否将您说的这段
“如果你只是想把A键的动作变化成B键动作,即把A的键码改成B的键码,那么正确的做法是,把A键的所有消息拦截,把消息中的键码改成B,然后再用CallNextHookEx把消息继续下去”
修改后的源码写出来呢?是修改lParam里的vkCode的值么?我尝试改了一下,可是貌似还有些问题。
#include "stdafx.h"
#include <Windows.h>
#define _WIN32_WINNT 0x050
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
BOOL fEatKeystroke = FALSE;
if (nCode == HC_ACTION)
{
switch (wParam)
{
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
case WM_KEYUP:
case WM_SYSKEYUP:
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)lParam;
if (fEatKeystroke = (p->vkCode == 0x41)) { //redirect a to b, 每次敲击都会进入两次 不知道为什么
printf("Hello a\n");
keybd_event('B', 0, 0, 0);
keybd_event('B', 0, KEYEVENTF_KEYUP, 0);
break;
}
break;
}
}
return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam, lParam));
} 展开
“如果你只是想把A键的动作变化成B键动作,即把A的键码改成B的键码,那么正确的做法是,把A键的所有消息拦截,把消息中的键码改成B,然后再用CallNextHookEx把消息继续下去”
修改后的源码写出来呢?是修改lParam里的vkCode的值么?我尝试改了一下,可是貌似还有些问题。
#include "stdafx.h"
#include <Windows.h>
#define _WIN32_WINNT 0x050
LRESULT CALLBACK LowLevelKeyboardProc(int nCode, WPARAM wParam, LPARAM lParam)
{
BOOL fEatKeystroke = FALSE;
if (nCode == HC_ACTION)
{
switch (wParam)
{
case WM_KEYDOWN:
case WM_SYSKEYDOWN:
case WM_KEYUP:
case WM_SYSKEYUP:
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)lParam;
if (fEatKeystroke = (p->vkCode == 0x41)) { //redirect a to b, 每次敲击都会进入两次 不知道为什么
printf("Hello a\n");
keybd_event('B', 0, 0, 0);
keybd_event('B', 0, KEYEVENTF_KEYUP, 0);
break;
}
break;
}
}
return(fEatKeystroke ? 1 : CallNextHookEx(NULL, nCode, wParam, lParam));
} 展开
2个回答
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询