使用C#锁定鼠标在特定屏幕上的移动

3
我有2个屏幕连接到我的电脑上。我还有一个热键控件,即使没有焦点也可以触发应用程序中的函数调用。
我需要做以下事情。当我启动C#应用程序时,鼠标只应锁定到当前屏幕(意味着它不应该能够移动到另一个屏幕)。按下热键后,它应该被锁定在第二个屏幕上,不能在第一个屏幕上移动。因此,基本上热键(本质上是一个函数调用)应允许在两个屏幕之间切换,并仅限制鼠标在该屏幕上移动。
是否有任何方法可以实现这一点?

你使用的是WinForms还是WPF? - Jacob Seleznev
Windows不是一个捕鼠器。用户可以通过简单的Ctrl+Escape随时退出。 - Hans Passant
我正在我的控制台应用程序中创建一个进程(打开浏览器),并将应用程序放置在另一个屏幕上。我需要热键来启用或禁用对在另一个屏幕上打开的该进程的焦点。不使用WPF / WinForms。 - PiyushW
@PiyushW 我更新了我的答案,并附上了WinAPI函数的链接。 - Jacob Seleznev
1个回答

4
你可以使用Cursor.Clip属性。例如:Cursor.Clip = Screen.PrimaryScreen.WorkingArea 如果没有WinForms,你可以使用ClipCursor函数:
[DllImport("user32.dll", CharSet=CharSet.Auto, ExactSpelling=true)]
public static extern bool ClipCursor(ref RECT rcClip);

这看起来很有帮助,但我如何在C#中让RECT结构起作用?我对C#相对较新。 - PiyushW
1
我在这个页面上找到了一些线索:http://www.pinvoke.net/default.aspx/user32.clipcursor现在我想知道如何解除限制我的光标,即将其设置回默认行为。 - PiyushW
1
为了恢复原始设置,我使用的是一个变通方法,其中我向RECT结构提供巨大的值,这些值显然超出了边界。有人能评论一下正确的做法吗? - PiyushW
1
如果此参数为NULL,则光标可以自由移动到屏幕上的任何位置。 - kamyker

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接