禁止一切非从键盘、鼠标发出的小气,该如何处理?
使用HOOK能否做到?有知道的人请给代码,谢谢
解决了分数立刻送上

解决方案 »

  1.   


    using System.Runtime.InteropServices;class Win32Hook
        {
            [DllImport("kernel32")]
            public static extern int GetCurrentThreadId();        [DllImport("user32",
            CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
            public static extern int SetWindowsHookEx(
            HookType idHook,
            HOOKPROC lpfn,
            int hmod,
            int dwThreadId);        public enum HookType
            {
                WH_KEYBOARD = 2,
                WH_MOUSE = 7
            }        public delegate int HOOKPROC(int nCode, int wParam, int lParam);        public void SetHook()
            {
                //设置鼠标钩子  
                SetWindowsHookEx(HookType.WH_MOUSE, 
                new HOOKPROC(this.MouseProc),
                0,
                GetCurrentThreadId());
                //设置键盘钩子
                SetWindowsHookEx(HookType.WH_MOUSE,
                new HOOKPROC(this.KeyboardProc),
                0,
                GetCurrentThreadId());
            }        public int KeyboardProc(int nCode, int wParam, int lParam)
            {
                //在这里放置你的处理代码
                //不处理就到达了禁止的作用
                return 1;
            }   
             public int MouseProc(int nCode, int wParam, int lParam)
            {
                //在这里放置你的处理代码 
                //不处理就到达了禁止的作用
                return 1;
            }   
        }
     可以在Form的构造函数里放入   
      Win32Hook   hook   =   new   Win32Hook();   
      hook.SetHook();
      

  2.   

    楼上的代码并不能实现楼主的要求。按键精灵是摸拟键盘鼠标的,摸拟的方式有纯发送消息、API操作键盘鼠标以及硬件摸拟。要禁用,你可以试试在WinForm中直接从DirectInput中读取键鼠操作,不过这样对按键精灵的“硬件摸拟模式”不知道有没有用,我没研究过。另外,你可以用FindWindow来查找按键精灵的窗口,发现窗口就不Kill掉或者你自己的程序就不运行。不过这种方法按键精灵也有招对付,它的注册版好像有个什么盾功能,可以防止其它程序检测。总而言之,很难做到完全禁止的。
      

  3.   

    谢谢各位,主要是现在学校里一些中文输入之类的考试,因为文章是公布的,学生都用按键精灵来考试了
    FindWindow我也考虑过,但是类似按键精灵的软件挺多,我想最好能有个一劳永逸(起码可以顶的长久点)的方法
      

  4.   

    有一底层钩子
     WH_KEYBOARD_LL
     可以判断键盘消息的来源 如是来源是LLKHF_INJECTED
     就说明不是由硬件产生的而是其它的键盘事件
     但我在C#不能直接用 可是有因为C#是托管的原因 但我用C++实际了 禁止了"按键精灵"
     我写了一个DLL 放到C#中也好用了 别的软件没测试 但"按键精灵"肯定没问题
     如果这个解决方案可以 
     给我你的E-mail  我给你Dll 和Dll的源码