c# 调用全局钩子一个的问题

我现在写的是一个按下键盘上的b键会返回[的程序,但是我现在按下b,不知道为什么返回的是两个[[描述下代码差不多是这样的HookProc的一个委托KeyBoardHookS... 我现在写的是一个按下键盘上的b键会返回[的程序,但是我现在按下b,不知道为什么返回的是两个[[
描述下代码差不多是这样的
HookProc的一个委托
KeyBoardHookStruct的一个结构
private void button1_Click(object sender, EventArgs e)
{
Hook_Start();
}

public void Hook_Start()
{
// 安装键盘钩子
if (hHook == 0)
{

KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);
hHook = SetWindowsHookEx(13, KeyBoardHookProcedure, GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);

}

}

KeyBoardHookProc这边我是这么写的
public static int KeyBoardHookProc(int nCode, IntPtr wParam, IntPtr lParam)
{

KeyBoardHookStruct input = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));//键盘
if (input.vkCode == (int)Keys.B)
{

keybd_event(219, 0, 0, 0);
keybd_event(219, 0, 2, 0);
return 1;

}
return CallNextHookEx(hHook, nCode, wParam, lParam);
}
自己写出来了,呵呵,不过还是谢谢啊
展开
 我来答
lcg1986
2009-12-11 · TA获得超过3374个赞
知道大有可为答主
回答量:1858
采纳率:90%
帮助的人:1590万
展开全部
在KeyBoardHookProc函数里面你要判断一下 wParam
因为一次按键会产生2条消息.WM_KEYDOWN 和 WM_KEYUP 消息
一个按下,一个弹起
百度网友b9c8b3191
2009-12-11 · TA获得超过5200个赞
知道大有可为答主
回答量:3683
采纳率:0%
帮助的人:3791万
展开全部
你按一次键会先后产生 WM_KEYDOWN 和 WM_KEYUP 消息
应该添上:
switch(wParam) {
case WM_KEYDOWN:
...
break;
case WM_KEYUP:
...
break;
default:
break;
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式