1

DirectX アプリケーションにキーを送信する必要があります。DirectInput フックを除いて最も低いレベルのキー シミュレーションであると聞いたので、SendInput() を使用しようとしています。

問題は、Windows アプリケーションでのみ問題なく動作し、DirectX アプリケーションでは問題なく動作することです。解決策を探していたところ、wVk の代わりにスキャンコードを使用し、dwFlags を 0x0008 (スキャンコード) に設定する必要があることがわかりました。

private static KEYBDINPUT createKeybdInput(ushort wVK, uint flag)
{
    KEYBDINPUT i = new KEYBDINPUT();

    i.wVk = 0;
    i.wScan = wVK;
    i.time = 0;
    i.dwExtraInfo = IntPtr.Zero;
    i.dwFlags = flag | (uint)0x0008;


    return i;
}


public void Keyboardpress()
{
    INPUT[] inp = new INPUT[2];

    inp[0].type = 1;
    inp[0].U.ki = createKeybdInput(0x41, 0x0000);
    inp[1].type = 1;
    inp[1].U.ki = createKeybdInput(0x41, 0x0002);



    if (SendInput(2, inp, Marshal.SizeOf(typeof(INPUT))) == 0)
    {
        new Exception("Error: " + Marshal.GetLastWin32Error().ToString());
    }

}

「a」を最前面のウィンドウに送信する必要がありますが、directX アプリケーションはそれに反応しません。また、DirectX スキャンコード (私の場合は 'a' = 0x1E) を使用しようとしましたが、まだ変更はありません。

ただし、SendInput() で動作するはずです。ソフトウェア「Glovepie」をダウンロードして、このプログラムがゲームのキーをシミュレートできるかどうかをテストしました。そうする方法があり、ライブラリにフックするとは思いません。いくつかの調査の後、SendInput() API も使用しているようです。それを機能させるために何をすべきか誰かが知っていますか?

どうもありがとうございました

4

1 に答える 1