C# winform 使用hook

zx136365192 2013-09-16 11:40:22
winform下使用hook勾住进程创建,觉得是否创建。
...全文
329 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
同需求 求解答
zx136365192 2013-09-18
  • 打赏
  • 举报
回复
winfor下用hook勾住创建进程,我决定是否启动。上面的是鼠标键盘什么的,那个进程的怎么用阿,有人写过吗。
zx136365192 2013-09-18
  • 打赏
  • 举报
回复
还是没有,,
zx136365192 2013-09-16
  • 打赏
  • 举报
回复
winfor下用hook勾住创建进程,我决定是否启动。上面的是鼠标键盘什么的,那个进程的怎么用阿,有人写过吗。
CqCoder 2013-09-16
  • 打赏
  • 举报
回复

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.");
        }

    }

a454676011 2013-09-16
  • 打赏
  • 举报
回复
没看明白问题描述。。。

110,545

社区成员

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

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

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