高手进来帮忙,急救,C#2.0中是不是不能使用键盘钩子了

xu_2007 2007-09-09 11:43:20
如题,发些代码,麻烦大家帮我看看是不是哪里有错:
class keyhook
{
public keyhook()
{
this.statrhook();
}
public event KeyEventHandler KeyUp;
public win32API.API.HookProc keyHook;
public int hkeyhook = 0;
private const int WH_KEYBOARD_LL = 13;
private int WH_KEYBOARD = 2;
public void statrhook()
{
if (this.hkeyhook == 0)
{
this.keyHook = new win32API.API.HookProc(this.KeyboardHookProc);
this.hkeyhook = win32API.API.SetWindowsHookEx(WH_KEYBOARD_LL,
this.keyHook,
Marshal.GetHINSTANCE(
Assembly.GetExecutingAssembly().GetModules()[0]),
0);
MessageBox.Show(this.hkeyhook.ToString(), "钩子");
}
//if (this.hkeyhook == 0)
//{
// this.sotphook();
//}
//int errorCode = Marshal.GetLastWin32Error();
//MessageBox.Show(errorCode.ToString(), "钩子");
}
public void sotphook()
{
bool retKeyboard;
if (this.hkeyhook != 0)
{
retKeyboard =win32API.API.UnhookWindowsHookEx(this.hkeyhook);
this.hkeyhook = 0;
}
}
private int KeyboardHookProc(int nCode, Int32 wParam, IntPtr lParam)
{
if (nCode >= 0 && this.KeyUp != null)
{
MessageBox.Show("ok", "");
win32API.API.KeyboardHookStruct key=(win32API.API.KeyboardHookStruct)Marshal.PtrToStructure(lParam,typeof(win32API.API.KeyboardHookStruct));
if (KeyUp != null && (wParam ==win32API.API.WM_KEYUP || wParam ==win32API.API.WM_SYSKEYUP))
{
Keys keydata = (Keys)key.vkCode;
KeyEventArgs e = new KeyEventArgs(keydata);
this.KeyUp(this, e);
}

}
return win32API.API.CallNextHookEx(this.hkeyhook,nCode, wParam, lParam);
}
}
...全文
168 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
wzuomin 2007-09-10
  • 打赏
  • 举报
回复
我也曾写过键盘鼠标钩子程序,参考
http://blog.csdn.net/wzuomin/archive/2007/06/18/1656315.aspx
heqi915 2007-09-09
  • 打赏
  • 举报
回复
不了解,帮你顶一下
xu_2007 2007-09-09
  • 打赏
  • 举报
回复
谢了,已经自己解决了,原来是.NET编释程序的问题!
he11o 2007-09-09
  • 打赏
  • 举报
回复
不了解,帮你顶一下
xu_2007 2007-09-09
  • 打赏
  • 举报
回复
MessageBox.Show(this.hkeyhook.ToString(), "钩子");

这个地方返回0,说明钩子安装不成功!
QuinsonYue 2007-09-09
  • 打赏
  • 举报
回复
jf
codeangel 2007-09-09
  • 打赏
  • 举报
回复
完全可以写钩子,调用window API 函数
如果要用全局钩子,编译时要选非托管的。
sadever 2007-09-09
  • 打赏
  • 举报
回复
说说怎么解决的?为什么啊,顺便蹭点分
macker0030 2007-09-09
  • 打赏
  • 举报
回复
既然解决了,就请散点分吧

110,534

社区成员

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

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

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