共用方式為


如何模擬滑鼠事件 (Windows Forms .NET)

模擬 Windows Forms 中的滑鼠事件並不像模擬鍵盤事件那麼直接。 Windows Forms 未提供協助程式類別來移動滑鼠並叫用按一下滑鼠動作。 控制滑鼠的唯一選項是使用原生 Windows 方法。 如果您正在使用自訂控制項或表單,則可以模擬滑鼠事件,但無法直接控制滑鼠。

事件

大部分事件都有叫用它們的對應方法,其名稱為 On 模式,後面接著 EventName,例如 OnMouseMove。 通常只有在自訂控制項和表單內才能使用這個選項,因為這些方法受到保護,無法從控制項或表單的内容外存取。 使用 OnMouseMove 之類方法的缺點是它實際上不會控制滑鼠或與控制項互動,而只會引發相關聯的事件。 例如,如果您想要模擬將滑鼠停留在 ListBox 中的項目上,OnMouseMoveListBox 不會以可視化方式回應游標下反白顯示的項目。

這些受保護的方法可用來模擬鍵盤事件。

  • OnMouseDown
  • OnMouseEnter
  • OnMouseHover
  • OnMouseLeave
  • OnMouseMove
  • OnMouseUp
  • OnMouseWheel
  • OnMouseClick
  • OnMouseDoubleClick

如需這些事件的詳細資訊,請參閱使用滑鼠事件 (Windows Forms .NET)

叫用按一下

考慮到大部分控制項會在按一下時執行某些動作,例如呼叫使用者程式碼的按鈕,或核取方塊會變更其核取狀態,Windows Forms 提供簡單的方法來觸發按一下。 某些控制項,例如下拉式方塊,在按一下時不會執行任何動作,而模擬按一下時對控制項沒有效果。

PerformClick

System.Windows.Forms.IButtonControl 介面提供 PerformClick 方法,其會模擬在控制項上按一下。 System.Windows.Forms.ButtonSystem.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 SendInputUser32.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

另請參閱