iT邦幫忙

0

C# 關於模擬鍵盤輸入的方法

最簡單的模擬鍵盤輸入的方法應該就是SendKeys
但漸漸發現SendKeys在某些地方好像會無法使用
接著便慢慢嘗試User32.dllkeyboard_even
玩著玩著野心便慢慢伸向了模擬鍵盤來控制遊戲腳色

因此基於好奇心
又在網路上查到了WinIO這種驅動級的模擬方式
WinIO看下來好像需要PS/2鍵盤才有辦法達成

所以想來問問各位大大
關於模擬鍵盤輸入這件事
還有其他方法可以實現模擬鍵盤輸入事件嗎?
總覺得應該是有什麼方法可以達成
不然網路上那些按鍵精靈甚至腳本程式又是如何做到的呢
/images/emoticon/emoticon06.gif

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
JamesDoge
iT邦高手 1 級 ‧ 2022-12-21 04:07:46
  1. 使用InputSimulator這個第三方函式庫,InputSimulator 可以在C#中通過NuGet管理器安裝,使用起來非常方便,並且可以在大多數的系統中使用。例如按下A鍵:
InputSimulator.SimulateKeyPress(VirtualKeyCode.VK_A);
  1. 使用Windows API中的PostMessage函數與SendMessage函數也可以實現模擬鍵盤輸入,可以用於各種視窗之間的通信。例如按下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鍵
}

我要發表回答

立即登入回答