首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

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

2012-04-08 
高手进来帮忙,急救,C#2.0中是不是不能使用键盘钩子了如题,发些代码,麻烦大家帮我看看是不是哪里有错:class

高手进来帮忙,急救,C#2.0中是不是不能使用键盘钩子了
如题,发些代码,麻烦大家帮我看看是不是哪里有错:
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);
                }
        }

[解决办法]
完全可以写钩子,调用window API 函数
如果要用全局钩子,编译时要选非托管的。
[解决办法]
我也曾写过键盘鼠标钩子程序,参考
http://blog.csdn.net/wzuomin/archive/2007/06/18/1656315.aspx

热点排行