winform下使用hook勾住进程创建,觉得是否创建。

解决方案 »

  1.   


    class KeyBoardHook
        {
            private static int hHook = 0;
            HookProc KeyBoardHookProcedure;        //全局的事件
            public event KeyEventHandler OnkeyBoardActivity;
            //委托
            public delegate int HookProc(int nCode, IntPtr wParam, IntPtr lParam);        //键盘Hook结构函数
            [StructLayout(LayoutKind.Sequential)]
            public class KeyBoardHookStruct
            {
                public int vkCode;
                public int scanCode;
                public int flags;
                public int time;
                public int dwExtraInfo;
            }
            #region DllImport
            //设置钩子
            [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
            public static extern int SetWindowsHookEx(int idHook, HookProc lpfn, IntPtr hInstance, int threadId);
            [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
            //抽掉钩子
            public static extern bool UnhookWindowsHookEx(int idHook);
            [DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
            //调用下一个钩子
            public static extern int CallNextHookEx(int idHook, int nCode, IntPtr wParam, IntPtr lParam);
            //取得模块句柄 
            [DllImport("kernel32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
            private static extern IntPtr GetModuleHandle(string lpModuleName);        //寻找目标进程窗口
            [DllImport("USER32.DLL")]
            public static extern IntPtr FindWindow(string lpClassName,
                string lpWindowName);
            //设置进程窗口到最前 
            [DllImport("USER32.DLL")]
            public static extern bool SetForegroundWindow(IntPtr hWnd);
            //模拟键盘事件 
            [DllImport("User32.dll")]
            public static extern void keybd_event(Byte bVk, Byte bScan, Int32 dwFlags, Int32 dwExtraInfo);        [DllImport("user32.dll")]
            static extern byte MapVirtualKey(byte wCode, int wMap);
            //释放按键的常量
            private const int KEYEVENTF_KEYUP = 2;
            public enum HookTypes
            {
                /// <include file='ManagedHooks.xml' path='Docs/General/Empty/*'/>
                None = -100,
                /// <include file='ManagedHooks.xml' path='Docs/General/Empty/*'/>
                Keyboard = 2,
                /// <include file='ManagedHooks.xml' path='Docs/General/Empty/*'/>
                Mouse = 7,
                /// <include file='ManagedHooks.xml' path='Docs/General/Empty/*'/>
                Hardware = 8,
                /// <include file='ManagedHooks.xml' path='Docs/General/Empty/*'/>
                Shell = 10,
                /// <include file='ManagedHooks.xml' path='Docs/General/Empty/*'/>
                KeyboardLL = 13,
                /// <include file='ManagedHooks.xml' path='Docs/General/Empty/*'/>
                MouseLL = 14
            };
            #endregion
           
            //返回截获数据
            private int KeyBoardHookProc(int nCode, IntPtr wParam, IntPtr lParam)
            {                //如果正常运行并且用户要监听键盘的消息
                if ((nCode >= 0) && (OnkeyBoardActivity != null))
                {
                    //监控用户键盘输入                    
                }
    }
            public void Start()
            {            if (hHook == 0)
                {
                    KeyBoardHookProcedure = new HookProc(KeyBoardHookProc);                hHook = SetWindowsHookEx((int)HookTypes.KeyboardLL, KeyBoardHookProcedure, GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);
                }            //如果装置失败停止钩子
                if (hHook == 0)
                {
                    Stop();
                    throw new Exception("SetWindowsHookEx failed.");
                }
            }        public void Stop()
            {
                bool retMouse = true;
                if (hHook != 0)
                {
                    retMouse = UnhookWindowsHookEx(hHook);
                    hHook = 0;
                }            //如果卸下钩子失败
                if (!(retMouse)) throw new Exception("UnhookWindowsHookEx failed.");
            }    }
      

  2.   

    winfor下用hook勾住创建进程,我决定是否启动。上面的是鼠标键盘什么的,那个进程的怎么用阿,有人写过吗。
      

  3.   

    winfor下用hook勾住创建进程,我决定是否启动。上面的是鼠标键盘什么的,那个进程的怎么用阿,有人写过吗。