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

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

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

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

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

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

该库不允许您修改钩子回调返回值,它将需要手术。 当心它有缺陷。 我将使用此示例代码 。 使用此示例回调方法:

 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重新获得控制权。