0

アクティブなアプリケーションへのキーストロークをシミュレートするコントローラー プログラムを作成しています。私はこのような方法を見つけました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つの質問:

  1. たとえば、左の Ctrl キーをアクティブなアプリケーションに送信したいのですが、両方を渡す必要がありwVk==LControlKeyますwScan==Controlか? 1 番目のみをパスし、2 番目をパスしないとどうなりますか? wVk==LControlKey; wScan==Control; dwFlags==0そして、( dwFlags をキーダウン) と(dwFlags をキーアップ)を渡す必要がありwVk==LControlKey; wScan==0; dwFlags==2ますか?

  2. Keysenumation there existでLControlKey, RControlKey, ControlKey、3 番目の意味は何ですか?

  3. 列挙にKeysは Control キーと Shift キーが存在しますが、Alt キーがないのはなぜですか? メソッドで Alt キーストロークを送信することはできませんSendInputか?

4

0 に答える 0