我一直在尝试编写一个小工具,它将修改鼠标在整个屏幕上的位置。我已经使用了我发现here的全局鼠标钩子库(我正在使用版本1),然后将鼠标位置信息从它生成的事件传递给我自己的函数(只是一个测试来看它现在工作)。
internal void ProcessMouseEvent(System.Drawing.Point point)
{
Cursor.Position = new Point(50,50);
}
运行时,鼠标似乎闪烁到指定点,但如果是移动事件,它会立即恢复到更改前的位置。只有当它通过点击事件完成时才会真正保持在新位置。
答案 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重新获得控制权。