CodeProject上的项目 全局钩子
http://www.codeproject.com/KB/cs/globalhook.aspx
问题是作者的Demo一切正常  
而我写同样的 会出现 未处理Win32Exception 操作成功完成这样的错误//作者的代码
UserActivityHook actHook;
void MainFormLoad(object sender, System.EventArgs e)
{
    actHook = new UserActivityHook(); // crate an instance with global hooks
    // hang on events
    actHook.KeyDown+=new KeyEventHandler(MyKeyDown);
}
public void MyKeyDown(object sender, KeyEventArgs e)
{
     LogWrite("KeyDown  - " + e.KeyData.ToString());
}
private void LogWrite(string txt)
{
textBox.AppendText(txt + Environment.NewLine);
textBox.SelectionStart = textBox.Text.Length;
}
//我的代码
UserActivityHook actHook;
private void AppForm_Load(object sender, EventArgs e)
{
    actHook = new UserActivityHook(false,true);
    actHook.KeyDown += new KeyEventHandler(MyKeyDown);
}
public void MyKeyDown(object sender, KeyEventArgs e)
{
    if (e.KeyData == Keys.F12)
    {
       MessageBox.Show("F12");
    }
    else
       return;
}
//错误定位在UserActivityHook.cs文件的第562行 throw new Win32Exception(errorCode);

解决方案 »

  1.   

    UserActivityHook 你的委托类型估计出问题了吧
    参数不太对嘛
    UserActivityHook 是什么?
    类吗?
      

  2.   

    恩  是作者写好的类  
    委托类型没错  完全是复制作者的demo里的代码
    开始也以为UserActivityHook跟作者的项目里的UserActivityHook不一样
    又重新把他的UserActivityHook覆盖掉我项目里的同名文件
    问题依旧哪位可以吧上面那个项目下载下来看看问题出在哪??
      

  3.   

    actHook = new UserActivityHook(false,true);//你的
    actHook = new UserActivityHook(); //作者的
    构造函数不一样
    你修改了UserActivityHook吗?
      

  4.   

    我没有改  那个构造函数有个重载的
    第一个false是不使用鼠标HOOK  第2个true是使用键盘hook
    我吧他改成不带参数的构造函数 也是那个问题LS的好人你能不能new一个项目用的试下看会不会出那个问题???
      

  5.   

    我用vb也写了个 鼠标 键盘 钩子,没发现有什么问题啊。
    我这里也有源码
    http://blog.csdn.net/wzuomin/archive/2007/06/18/1656315.aspx
      

  6.   

    你在HookProc用MessageBox.Show("F12");啊?要是人家用的是阻塞模式的话系统都要挂了
      

  7.   

    啊??  hookproc不能用msgbox??  
    我的msgbox只用来试下有效果没  居然.......    >_<
      

  8.   

    还是不对啊  我改了不用msgbox  换成改变标题还是出那问题
    奇怪作者的demo一点问题都没有
      

  9.   

    项目-属性-调试-启用Visual Studio宿主进程
    把勾去掉
      

  10.   

    看了它的代码,却没弄懂它的全局钩子是怎么弄成的,按常理说应该只能钩挂自己的进程的消息。
    全局钩子不是需要DLL的,而且会注入其他进程的,但是托管下的它是怎么工作的,还没搞明白