用程式模擬人按下鍵盤或滑鼠的動作

一樣是用到 user32.dll 裡面的API,所以要先註冊
[DllImport("User32")] public extern static void mouse_event(int dwFlags, int dx, int dy, int dwData, IntPtr dwExtraInfo);
[DllImport("User32")] public extern static void SetCursorPos(int x, int y);
[DllImport("User32")] public extern static bool GetCursorPos(out Point p);
[DllImport("User32")] public extern static int ShowCursor(bool bShow);
[DllImport("USER32.DLL")] public static extern IntPtr FindWindow(string lpClassName, string lpWindowName);
[DllImport("USER32.DLL")] public static extern bool SetForegroundWindow(IntPtr hWnd);


然後滑鼠有些動作的flag也是固定的,要先宣告好備用。
public enum MouseEventTFlags
{
LEFTDOWN = 0x00000002,
LEFTUP = 0x00000004,
MIDDLEDOWN = 0x00000020,
MIDDLEUP = 0x00000040,
MOVE = 0x00000001,
ABSOLUTE = 0x00008000,
RIGHTDOWN = 0x00000008,
RIGHTUP = 0x00000010
}


接下來要使用就簡單囉
滑鼠的部份就是
SetCursorPos(800, 640);  // 設定你要按的位置
mouse_event((int)(MouseEventTFlags.LEFTDOWN), 0, 0, 0, IntPtr.Zero);  // 按下 = =
mouse_event((int)MouseEventTFlags.LEFTUP, 0, 0, 0, IntPtr.Zero); // 起來 沒有起來就等於一直按著囉


鍵盤則是
IntPtr calculatorHandle = FindWindow(null, "小算盤"); 
// 先找到你要送 key message 到哪個視窗,第二個參數給視窗的名稱即可
if (calculatorHandle == IntPtr.Zero)  // 這裡檢查有沒有找到
{
MessageBox.Show("Calculator is not running.");
return;
}
SetForegroundWindow(calculatorHandle); // 然後 focus 在你要送的視窗是
SendKeys.SendWait("1");  // 開始送字元
SendKeys.SendWait("+");
SendKeys.SendWait("1");
SendKeys.SendWait("=");

相當實用!!

arrow
arrow
    全站熱搜
    創作者介紹
    創作者 Roronoa 的頭像
    Roronoa

    羅羅亞的世界

    Roronoa 發表在 痞客邦 留言(3) 人氣()