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

来源:百度知道 编辑:UC知道 时间:2024/05/20 06:15:18
我现在写的是一个按下键盘上的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)
{

在KeyBoardHookProc函数里面你要判断一下 wParam
因为一次按键会产生2条消息.WM_KEYDOWN 和 WM_KEYUP 消息
一个按下,一个弹起

你按一次键会先后产生 WM_KEYDOWN 和 WM_KEYUP 消息
应该添上:
switch(wParam) {
case WM_KEYDOWN:
...
break;
case WM_KEYUP:
...
break;
default:
break;
}