设置鼠标位置不起作用c#

时间:2012-12-28 01:41:48

标签: c# mouseevent mouse-hook

我一直在尝试编写一个小工具,它将修改鼠标在整个屏幕上的位置。我已经使用了我发现here的全局鼠标钩子库(我正在使用版本1),然后将鼠标位置信息从它生成的事件传递给我自己的函数(只是一个测试来看它现在工作)。

internal void ProcessMouseEvent(System.Drawing.Point point)
{
    Cursor.Position = new Point(50,50);
}

运行时,鼠标似乎闪烁到指定点,但如果是移动事件,它会立即恢复到更改前的位置。只有当它通过点击事件完成时才会真正保持在新位置。

2 个答案:

答案 0 :(得分:3)

要限制鼠标有效运行的位置,您需要使用cursor.clip。您可以找到其文档here。它会做你想要的更容易,也是推荐的方式。

答案 1 :(得分:3)

这里的问题是钩子为您提供了鼠标消息的通知。但是并不妨碍实际处理通知的应用程序处理它。所以它被正常处理,鼠标移动到想去的地方。你需要做的是阻止传递消息,这需要从钩子回调中返回一个非零值。

库不允许你修改钩子回调返回值,它需要手术。当心它是马车。我会改用this sample code。使用此示例回调方法:

private static IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam) {
    if (nCode >= 0 && MouseMessages.WM_MOUSEMOVE == (MouseMessages)wParam) {
        System.Windows.Forms.Cursor.Position = new Point(50, 50);
        return (IntPtr)1;   // Stop further processing!
    }
    return CallNextHookEx(_hookID, nCode, wParam, lParam);
}

你会发现它现在已经坚固了。使用Alt + Tab,Alt + D,E重新获得控制权。