首先您需要導入一些功能。
要改變光標位置:
[DllImport("user32.dll", EntryPoint = "SetCursorPos")]
[return: MarshalAs(UnmanagedType.Bool)]
public static extern bool SetCursorPos(
[In] int X,
[In] int Y);
要模擬鼠標事件:
[DllImport("user32.dll", CharSet = CharSet.Auto, CallingConvention = CallingConvention.StdCall)]
public static extern void mouse_event(
[In] uint dwFlags,
[In] uint dx,
[In] uint dy,
[In] int dwData,
[In] uint dwExtraInfo);
可能的鼠標事件:
public enum MouseEvents
{
MOUSEEVENTF_LEFTDOWN = 0x02,
MOUSEEVENTF_LEFTUP = 0x04,
MOUSEEVENTF_RIGHTDOWN = 0x08,
MOUSEEVENTF_RIGHTUP = 0x10,
MOUSEEVENTF_WHEEL = 0x0800,
}
您可以發送按下鼠標和鼠標了,模擬點擊:
mouse_event((uint)MouseEvents.MOUSEEVENTF_LEFTDOWN | (uint)MouseEvents.MOUSEEVENTF_LEFTUP, X, Y, 0, 0);
沒有測試這一點,但應該按下鼠標,拖動和釋放:
mouse_event((uint)MouseEvents.MOUSEEVENTF_LEFTDOWN, X, Y, 0, 0);
SetCursorPos((int)X+10, (int)Y+10);
mouse_event((uint)MouseEvents.MOUSEEVENTF_LEFTUP, X+10, Y+10, 0, 0);
你能不能工作在更高,更語義層次?即使用[UI自動化框架](https://msdn.microsoft.com/en-us/library/ms747327(v = vs.110).aspx)或公開的API? –
@JordanMiller請求者,不要編輯一個問題把答案放在裏面。如有必要,發佈自己的答案,然後驗證它。不要更新標題。 –
@jordan在繼續使用SO之前,請先閱讀[faq]。這是*不是*論壇和規則完全不同。如果你想回答自己的問題,然後發佈答案。答案旁邊的複選標記用於選擇幫助您解決問題的答案。 – dandan78