IntPtr hookProc(int code, IntPtr wparam, IntPtr lparam)
        {
            if (code < 0) return CallNextHookEx(_nextHookPtr, code, wparam, lparam);            MSLLHOOKSTRUCT msllStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lparam, typeof(MSLLHOOKSTRUCT));
            if (msllStruct.pt.X>=300)
            {
                this.Text = Cursor.Position.ToString();
                SetCursorPos(300, msllStruct.pt.Y);
            }            return IntPtr.Zero;
        }        public void SetHook()
        {
            if (_nextHookPtr != IntPtr.Zero)
            {
                return;
            }            HookProc myhookProc = new HookProc(hookProc);
            //_nextHookPtr = SetWindowsHookEx((int)HookType.MouseLL, myhookProc, IntPtr.Zero, GetCurrentThreadId()); 
            _nextHookPtr = SetWindowsHookEx((int)HookType.MouseLL, myhookProc, GetModuleHandle(Process.GetCurrentProcess().MainModule.ModuleName), 0);
        }
这段代码是全局的鼠标HOOK,让鼠标x坐标大于300的时候,回到300。
但只有当鼠标点了左右键的时候,光标才会回到300。
该如何解决呢?请不要回复我Cursor.Clip = .......... ,我只是想了解上述代码的问题,和解决方法

解决方案 »

  1.   

    晕~~杀鸡能用上牛刀~~ 如果控制鼠标.NET就可以了 搞的钩子什么都上来了.... Cursor.Position = new Point(300, 300);
      

  2.   

    你误会了,看来我还是要把之前的帖搞上来,不然大家会误会我的本意。
    你看一下这个就明白了,http://topic.csdn.net/u/20090519/15/17473596-48dc-406d-b192-a527e60d8614.html
    顺便看看能不能帮我解决这个问题。
      

  3.   

    如果只有按键被hook到,是不是米有响应WM_MOUSEMOVE 消息?
    from MSDN:
    The WM_MOUSEMOVE message is posted to a window when the cursor moves. If the mouse is not captured, the message is posted to the window that contains the cursor. Otherwise, the message is posted to the window that has captured the mouse.A window receives this message through its WindowProc function.
      

  4.   

    有响应,this.Text = Cursor.Position.ToString(); 这句还有被执行,可以可按到坐标的变化。眼睁睁的看着坐标超出范围。
      

  5.   

    if (code < 0) return CallNextHookEx(_nextHookPtr, code, wparam, lparam);
    另外,全局Hook要用DLL来做,SetWindowsHookEx的第3参数给DLL的ModuleHandle。
      

  6.   

    那就是你代码有问题了,因为捕获的是鼠标的所有动作,包括左右键,鼠标移动,滚轮轮动等,所以不可能点击起作用,而移动鼠标不起作用,你代码写错了,不应该返回IntPtr.Zerg,而始终是CallNextHookEx的返回值,你试试这样:        IntPtr hookProc(int code, IntPtr wparam, IntPtr lparam)
            {
                MSLLHOOKSTRUCT msllStruct = (MSLLHOOKSTRUCT)Marshal.PtrToStructure(lparam, typeof(MSLLHOOKSTRUCT));
                if (msllStruct.pt.X>=300)
                {
                    this.Text = Cursor.Position.ToString();
                    SetCursorPos(300, msllStruct.pt.Y);
                }
                return CallNextHookEx(_nextHookPtr, code, wparam, lparam);
            }