如题,怎么捕捉非窗体上的鼠标的单击,拖动,双击,右单击等事件,还有键盘的输入事件注意不是笨窗体上的,是系统全局的。。

解决方案 »

  1.   

    没有点简单的方法,至少给说下用哪个api吧?
      

  2.   

    全局钩子 public class HookMessage
        {
            private IntPtr m_HookEx;
            /// <summary>
            /// 设置自己进程的钩子
            /// </summary>
            /// <param name="p_HookCodes">钩子类型</param>
            public HookMessage(WindowsHookCodes p_HookCodes)
            {
                m_HookEx = Win32API.SetWindowsHookEx((int)p_HookCodes, new Win32API.HookProc(SetHookProc), IntPtr.Zero, Win32API.GetCurrentThreadId());
            }
            /// <summary>
            /// 设置进程的钩子
            /// </summary>
            /// <param name="p_HookCodes">钩子类型</param>
            /// <param name="p_ThreadID">全局钩子</param>
            public HookMessage(WindowsHookCodes p_HookCodes, bool p_Zero)
            {         
                IntPtr _Value =System.Runtime.InteropServices.Marshal.GetHINSTANCE(System.Reflection.Assembly.GetExecutingAssembly().GetModules()[0]);
                m_HookEx = Win32API.SetWindowsHookEx((int)p_HookCodes, new Win32API.HookProc(SetHookProc), _Value, 0);
            }
            /// <summary>
            /// 关闭钩子
            /// </summary>
            public void UnHookMessage()
            {
                if (Win32API.UnhookWindowsHookEx(m_HookEx))
                {
                    m_HookEx = IntPtr.Zero;
                }
            }        public delegate void GetHookMessage(int p_Code, IntPtr p_wParam, IntPtr p_lParam);
            public event GetHookMessage GetHook;        private IntPtr SetHookProc(int p_Code, IntPtr p_wParam, IntPtr p_lParam)
            {
                GC.Collect();
                GC.WaitForPendingFinalizers();
                GC.Collect();
                if (GetHook != null) GetHook(p_Code, p_wParam, p_lParam);
                return IntPtr.Zero;
            }
        }
      

  3.   

    使用HOOK技术,同时使用GetCursorPos、kb_event、WM_MOUSEMOVE、WM_MOUSEDOWN、WM_MOUSEUP、WM_MOUSEWHELL、WM_KEYDOWN、WM_KEYUP可以检查全局鼠标移动、按下/抬起、中键滚动、键盘按下/抬起动作。