最簡單的模擬鍵盤輸入的方法應該就是SendKeys
了
但漸漸發現SendKeys
在某些地方好像會無法使用
接著便慢慢嘗試User32.dll
的keyboard_even
玩著玩著野心便慢慢伸向了模擬鍵盤來控制遊戲腳色
因此基於好奇心
又在網路上查到了WinIO
這種驅動級的模擬方式
但WinIO
看下來好像需要PS/2鍵盤才有辦法達成
所以想來問問各位大大
關於模擬鍵盤輸入這件事
還有其他方法可以實現模擬鍵盤輸入事件嗎?
總覺得應該是有什麼方法可以達成
不然網路上那些按鍵精靈甚至腳本程式又是如何做到的呢
InputSimulator.SimulateKeyPress(VirtualKeyCode.VK_A);
// 引用User32.dll庫
using System.Runtime.InteropServices;
// 定義PostMessage函數
[DllImport("user32.dll", SetLastError = true)]
public static extern bool PostMessage(IntPtr hWnd, uint Msg, int wParam, int lParam);
// 定義SendMessage函數
[DllImport("user32.dll", SetLastError = true)]
public static extern IntPtr SendMessage(IntPtr hWnd, uint Msg, IntPtr wParam, IntPtr lParam);
// 定義常數 WM_KEYDOWN和WM_KEYUP消息
public const uint WM_KEYDOWN = 0x0100;
public const uint WM_KEYUP = 0x0101;
// 模擬按下A鍵(使用PostMessage函數)
public void PressAKeyByPostMessage()
{
IntPtr hWnd = GetForegroundWindow(); // 取得前景視窗handle
PostMessage(hWnd, WM_KEYDOWN, 0x41, 0); // A鍵
}
// 模擬按下A鍵(使用SendMessage函數)
public void PressAKeyBySendMessage()
{
IntPtr hWnd = GetForegroundWindow(); // 取得前景視窗handle
SendMessage(hWnd, WM_KEYDOWN, (IntPtr)0x41, (IntPtr)0); // A鍵
}