예제 #1
0
파일: Hook.cs 프로젝트: larack8/WarKey
        /// <summary>
        /// 鼠标钩子处理方法
        /// </summary>
        /// <param name="nCode">指定是否需要处理该消息,消息类型WH_MOUSE_LL</param>
        /// <param name="wParam">该消息的附加消息 </param>
        /// <param name="lParam">该消息的附加消息 </param>
        /// <returns></returns>
        private int MouseHookProc(int nCode, Int32 wParam, IntPtr lParam)
        {
            if (Flag == HookFlag.IsRunning && (nCode >= 0) && (MouseEvent != null))
            {
                //将数据从非托管内存块封送到新分配的指定类型的托管对象。
                MouseHookStruct mouseHookStruct = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));
                MouseButtons    mousebutton     = MouseButtons.None;
                short           mouseDelta      = 0;
                switch (wParam)
                {
                case (int)WM_MOUSE.WM_LBUTTONDOWN:
                    mousebutton = MouseButtons.Left;
                    break;

                case (int)WM_MOUSE.WM_RBUTTONDOWN:
                    mousebutton = MouseButtons.Right;
                    break;

                case (int)WM_MOUSE.WM_MBUTTONDOWN:
                    mousebutton = MouseButtons.Middle;
                    break;

                case (int)WM_MOUSE.WM_MOUSEWHEEL:
                    mouseDelta = (short)((mouseHookStruct.MouseData >> 16) & 0xffff);
                    break;

                case (int)WM_MOUSE.WM_XBUTTONDOWN:
                    if (mouseHookStruct.MouseData == (uint)WM_MOUSE.MD_XBUTTON1)
                    {
                        mousebutton = MouseButtons.XButton1;
                    }
                    else if (mouseHookStruct.MouseData == (uint)WM_MOUSE.MD_XBUTTON2)
                    {
                        mousebutton = MouseButtons.XButton2;
                    }
                    break;
                }
                MouseHookEventArgs e = new MouseHookEventArgs(mousebutton, mouseHookStruct.Point, mouseDelta);
                if (MouseEvent(this, e))
                {
                    return(1);
                }
            }
            return(CallNextHookEx(this._hookHandle, nCode, wParam, lParam));
        }
예제 #2
0
        /// <summary>
        /// 鼠标消息回调函数
        /// 功能:修改所有鼠标消息,修改为左键按下;
        /// 按下(抬起)鼠标左键->向下发送Z键按下(抬起)
        /// 按下(抬起)鼠标右键->向下发送X键按下(抬起)
        /// </summary>
        /// <param name="nCode"></param>
        /// <param name="wParam"></param>
        /// <param name="lParam"></param>
        /// <returns></returns>
        private int MouseHookProc(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if (nCode >= 0)
            {
                theMouseHookStruct     = (MouseHookStruct)Marshal.PtrToStructure(lParam, typeof(MouseHookStruct));  //定义结构体并赋值鼠标坐标
                myForm.theXYLabel.Text = "X:" + theMouseHookStruct.pt.x.ToString() + "Y:" + theMouseHookStruct.pt.y.ToString();
                Crosshair(theMouseHookStruct.pt);
                switch ((int)wParam)
                {
                case WM_LBUTTONDOWN:
                {
                    mySim.Keyboard.KeyDown(VirtualKeyCode.VK_Z);
                    return(1);
                }

                case WM_LBUTTONUP:
                {
                    mySim.Keyboard.KeyUp(VirtualKeyCode.VK_Z);
                    return(1);
                }

                case WM_RBUTTONDOWN:
                {
                    mySim.Keyboard.KeyDown(VirtualKeyCode.VK_X);
                    return(1);
                }

                case WM_RBUTTONUP:
                {
                    mySim.Keyboard.KeyUp(VirtualKeyCode.VK_X);
                    return(1);
                }

                default: break;
                }
            }
            return(CallNextHookEx(MouseHookID, nCode, wParam, lParam));
        }