用程式模擬人按下鍵盤或滑鼠的動作
一樣是用到 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("=");
相當實用!!

最近剛好在找這方面資料 謝謝提供!
不用客氣~ :D
程式可正常運行,感謝分享 有個疑問 當我要傳按鍵給其他應用程式(非小算盤)時 會出現例外: 「由於應用程式並不處理 Windows 的訊息,所以 SendKeys 無法於這個應用程式中執行。您可以變更該應用程式處理 Windows 訊息,或使用 SendKeys.SendWait 方法。」 可是換了SendKeys.SendWait也是沒反應 不知道大大對這有沒有什麼看法@@ 感謝!
請問如果要同時輸入兩個按鍵該怎麼做呢? 例如:ctrl+C