这个问题的解决方法很简单。您所需要的只是一个System.Windows.Forms.Timer
, 并用于从 user32.dllSystem.Runtime.InteropService.DllImport
中外部方法。GetKeyState
该函数有一个任意整数类型的参数,它返回short (Int16)。此功能可以告诉您是否在任何时候和任何地方都按下了某些键,而不取决于表单。启用计时器时,您可以检查鼠标位置是否超出表单边界。获取鼠标位置的方法有很多。
一种方法是Cursor.Position
, 或Control.MousePosition
, 或者您可以使用 bool GetCursorPos(ref Point lpPoint)
,一种外部方法,您可以从“user32.dll” DllImport 它。form.Bounds 或 form.ClientRectangle,或 form.Location 和 form.Size 或 form.Left 和 form.Top 和 form.Width 和 form.Height,所有这些都为您带来了表单边界。在 timer_Tick 函数事件中,您编写以下代码,例如:
var mp = Cursor.Position;
var fb = form.ClientRectangle; // Or form.Bounds
if (mp.X < fb.X || mp.Y < fb.Y || mp.X > fb.X + fb.Width || mp.Y > fb.Y + fb.Height)
{
// Use GetKeyState from user32.dll to detect if at least 1 key is pressed
// (look at internet how to do it exactly)
// If yes MessageBox.Show("Clicked outside");
}
如果至少按下了 1 个键,然后使用 显示您的消息MessageBox
。你可以在互联网上阅读我之前所说的所有这些东西,如果你成功了,它就会起作用!