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

wwwcyq 2011-12-18 05:15:41
键盘信息类:
[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()那里。
另,安装钩子是成功的。
为什么会出现这种情况,怎么解决?请高手解答!
...全文
121 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
自己顶一下

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧