アクティブなアプリケーションへのキーストロークをシミュレートするコントローラー プログラムを作成しています。私はこのような方法を見つけましたSendInput
(私はキーボードだけを気にするので、無関係な定義は省略されています):
[StructLayout(LayoutKind.Explicit)]
public struct INPUT
{
[FieldOffset(0)]
public Int32 type;
[FieldOffset(4)]
public KEYBDINPUT ki;
[FieldOffset(4)]
public MOUSEINPUT mi;
[FieldOffset(4)]
public HARDWAREINPUT hi;
}
[StructLayout(LayoutKind.Sequential)]
public struct KEYBDINPUT
{
public Int16 wVk;
public Int16 wScan;
public Int32 dwFlags;
public Int32 time;
public IntPtr dwExtraInfo;
}
[DllImport("user32.dll")]
public static extern UInt32 SendInput(UInt32 nInputs, ref INPUT pInputs, int cbSize);
を知ってwVk
おり、列挙値wScan
によって割り当てることができます。System.Windows.Forms.Keys
値も調べたところ、見つかりましたShift=65536, Control=131072, Alt=262144
(すべてのキーの値は1〜254です)。また、これら 3 つの値がwScan
(1、2、4 に対応する) にある必要があり、それらは修飾子の状態フラグであることもわかっています。しかし、3つの質問:
たとえば、左の Ctrl キーをアクティブなアプリケーションに送信したいのですが、両方を渡す必要があり
wVk==LControlKey
ますwScan==Control
か? 1 番目のみをパスし、2 番目をパスしないとどうなりますか?wVk==LControlKey; wScan==Control; dwFlags==0
そして、( dwFlags をキーダウン) と(dwFlags をキーアップ)を渡す必要がありwVk==LControlKey; wScan==0; dwFlags==2
ますか?Keys
enumation there existでLControlKey, RControlKey, ControlKey
、3 番目の意味は何ですか?列挙に
Keys
は Control キーと Shift キーが存在しますが、Alt キーがないのはなぜですか? メソッドで Alt キーストロークを送信することはできませんSendInput
か?