[只要拖动鼠标,当位置改变时,它就会向窗体发送许多值,这很容易得到光标的位置,形成下面的代码。
MessageBox.Show(Cursor.Position.ToString());
<< img src =“ https://image.soinside.com/eyJ1cmwiOiAiaHR0cHM6Ly9pLnN0YWNrLmltZ3VyLmNvbS9ja2VVRy5wbmcifQ==” alt =“显示鼠标位置的消息框。”>
但是当用户clicked超出窗体边界时,我需要获取鼠标位置。不只是将鼠标悬停。我使用下面的代码行来做到这一点:
private void Form1_Deactivate(object sender, EventArgs e)
{
MessageBox.Show(Cursor.Position.ToString());
}
我将MessageBox.Show(Cursor.Position.ToString());放入表单Deactivate事件中。当用户在表单外单击时,肯定会发生此事件。但是,当用户没有单击外部但使用ALT + TAB组合键更改程序时,它也会发送错误的值。
实际上,我必须从第一次单击的位置开始捕获该区域的屏幕快照。因此,我需要在窗体外部单击光标时的位置。喜欢:
通过拖动鼠标,很容易获得光标在窗体边界之外的位置,只要位置改变,它就会向窗体发送许多值,形成下面的代码行。 ...
您应该使用Global Mouse Hook
逻辑来执行此操作。
这可能有帮助。
解决这个问题很简单。您只需要一个System.Windows.Forms.Timer
,然后使用System.Runtime.InteropService.DllImport
从user32.dll中终止方法GetKeyState
。
尝试一下:
停用事件会通知您表单不再有效。可能由于许多原因而发生。