+ -
当前位置:首页 → 问答吧 → 在键盘钩子中对lParam进行Marshal.PtrToStructure类型转换时发生“内存保护”错误。

在键盘钩子中对lParam进行Marshal.PtrToStructure类型转换时发生“内存保护”错误。

时间:2011-12-18

来源:互联网

键盘信息类: 
  [StructLayout(LayoutKind.Sequential)]
  public struct KeyBoardHookStruct
  {
  public int vkCode;
  public int scanCode;
  public int flags;
  public int time;
  public int dwExtraInfo;
  }
在键盘钩子函数 
private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)中进行 
KeyBoardHookStruct input = (KeyBoardHookStruct)Marshal.PtrToStructure(lParam, typeof(KeyBoardHookStruct));
时出现“尝试读取或写入受保护的内存。这通常指示其他内存已损坏。”错误。 
奇怪的是,在try块中出现错误时,它不是转到catch块中抛出异常,而是直接跳到Main()函数的Application.Run()那里。 
另,安装钩子是成功的。 
为什么会出现这种情况,怎么解决?请高手解答!

作者: wwwcyq   发布时间: 2011-12-18

自己顶一下

作者: wwwcyq   发布时间: 2011-12-18

自己顶一下

作者: wwwcyq   发布时间: 2011-12-18

或者说,在全局钩子中,如何获取键盘按下的是哪个键值?

hKeyboardHook = SetWindowsHookEx(13,KeyboardHookProc,Marshal.GetHINSTANCE(Assembly.GetExecutingAssembly().GetModules()[0]), 0);

在KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam) 过程,如何取得按下的键值?

作者: wwwcyq   发布时间: 2011-12-18