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));
}
展开
 我来答
cooke1234
2014-04-11 · TA获得超过6861个赞
知道大有可为答主
回答量:4617
采纳率:72%
帮助的人:3622万
展开全部
PKBDLLHOOKSTRUCT p = (PKBDLLHOOKSTRUCT)lParam; //获得回调的数据
if (p->vkCode == 0x41) //修改掉键码(实际上把回调的数据修改了)

p->vkCode = 'B';
return CallNextHookEx(NULL, nCode, wParam, lParam)); //让代码继续后续处理 (此时后续代码处理的是B键)
来自:求助得到的回答
bhtzu
2014-04-11 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4270万
展开全部
		//case WM_KEYDOWN:
//case WM_SYSKEYDOWN:

把这两行注销看看。

已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式