如何模擬滑鼠事件 (Windows Forms .NET)
模擬 Windows Forms 中的滑鼠事件並不像模擬鍵盤事件那麼直接。 Windows Forms 不提供協助程式類別來移動滑鼠並叫用按一下滑鼠動作。 控制滑鼠的唯一選項是使用原生 Windows 方法。 如果您正在使用自訂控制項或表單,您可以模擬滑鼠事件,但無法直接控制滑鼠。
重要
.NET 7 和 .NET 6 的桌面指南檔正在建置中。
事件
大部分事件都有一個對應的方法來叫用它們,其名稱為 On
,後面接著 EventName
,例如 OnMouseMove
。 這個選項只能在自訂控制項或表單內使用,因為這些方法受到保護,而且無法從控制項或表單的內容外部存取。 使用 這類 OnMouseMove
方法的缺點是它實際上不會控制滑鼠或與控制項互動,而只會引發相關聯的事件。 例如,如果您想要模擬將滑鼠停留在 中的 ListBox 專案上, OnMouseMove
而且 ListBox
不會以視覺化方式回應游標下反白顯示的專案。
這些受保護的方法可用來模擬滑鼠事件。
OnMouseDown
OnMouseEnter
OnMouseHover
OnMouseLeave
OnMouseMove
OnMouseUp
OnMouseWheel
OnMouseClick
OnMouseDoubleClick
如需這些事件的詳細資訊,請參閱 使用滑鼠事件 (Windows Forms .NET)
叫用按一下
考慮到大部分控制項會在按一下時執行某些動作,例如呼叫使用者程式碼的按鈕,或核取方塊變更其核取狀態,Windows Forms 提供簡單的方法來觸發按一下。 某些控制項,例如下拉式方塊,在按一下並模擬按一下時不會執行任何特殊動作,對控制項沒有任何作用。
PerformClick
介面 System.Windows.Forms.IButtonControl 會提供 PerformClick 模擬按一下控制項的方法。 System.Windows.Forms.Button和 System.Windows.Forms.LinkLabel 控制項都會實作這個介面。
button1.PerformClick();
Button1.PerformClick()
InvokeClick
使用表單自訂控制項時,請使用 InvokeOnClick 方法來模擬滑鼠點選。 這是受保護的方法,只能從表單或衍生的自訂控制項中呼叫。
例如,下列程式碼會從 button1
按一下核取方塊。
private void button1_Click(object sender, EventArgs e)
{
InvokeOnClick(checkBox1, EventArgs.Empty);
}
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
InvokeOnClick(CheckBox1, EventArgs.Empty)
End Sub
使用原生 Windows 方法
Windows 提供方法,您可以呼叫 以模擬滑鼠移動,然後按一下 ,例如 User32.dll SendInput
和 User32.dll SetCursorPos
。 下列範例會將滑鼠游標移至控制項的中心:
[DllImport("user32.dll", EntryPoint = "SetCursorPos")]
[return: MarshalAs(UnmanagedType.Bool)]
private static extern bool SetCursorPos(int x, int y);
private void button1_Click(object sender, EventArgs e)
{
Point position = PointToScreen(checkBox1.Location) + new Size(checkBox1.Width / 2, checkBox1.Height / 2);
SetCursorPos(position.X, position.Y);
}
<Runtime.InteropServices.DllImport("USER32.DLL", EntryPoint:="SetCursorPos")>
Public Shared Function SetCursorPos(x As Integer, y As Integer) As Boolean : End Function
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim position As Point = PointToScreen(CheckBox1.Location) + New Size(CheckBox1.Width / 2, CheckBox1.Height / 2)
SetCursorPos(position.X, position.Y)
End Sub
另請參閱
意見反應
https://aka.ms/ContentUserFeedback。
即將登場:在 2024 年,我們將逐步淘汰 GitHub 問題作為內容的意見反應機制,並將它取代為新的意見反應系統。 如需詳細資訊,請參閱:提交並檢視相關的意見反應