質問

キーボードアクション(sendinput/sendkeys/etc)を偽造するすべての通常の方法を試しましたが、DirectInputを使用したゲームでは機能していないようです。たくさんの読書と検索の後、私はつまずきました 傍受, 、これは、デバイスに接続できるC ++ライブラリです。

C ++(C#のために何も存在しなかった)で作業してから非常に長い時間が経ちました。これに問題があります。以下のサンプルコードに貼り付けました。

とにかくこれを使用してコードから重要なアクションを開始するためにあるように見えますか?サンプルはすべて、デバイスに接続してアクションを書き直します(XキープリントY、マウス軸などを反転させます)。

enum ScanCode
{
    SCANCODE_X   = 0x2D,
    SCANCODE_Y   = 0x15,
    SCANCODE_ESC = 0x01
};

int main()
{
    InterceptionContext context;
    InterceptionDevice device;
    InterceptionKeyStroke stroke;

    raise_process_priority();

    context = interception_create_context();

    interception_set_filter(context, interception_is_keyboard, INTERCEPTION_FILTER_KEY_DOWN | INTERCEPTION_FILTER_KEY_UP);

    /*
    for (int i = 0; i < 10; i++)
    {
        Sleep(1000);
        stroke.code = SCANCODE_Y;
        interception_send(context, device, (const InterceptionStroke *)&stroke, 1);
    }
    */

    while(interception_receive(context, device = interception_wait(context), (InterceptionStroke *)&stroke, 1) > 0)
    {
        if(stroke.code == SCANCODE_X) stroke.code = SCANCODE_Y;

        interception_send(context, device, (const InterceptionStroke *)&stroke, 1);

        if(stroke.code == SCANCODE_ESC) break;
    }

私がコメントしたコードは、私が試したもので、うまくいかなかったものでした。

役に立ちましたか?

解決

キープレスを取得するには、上下に重要な状態を微調整する必要があります。変数のLoopで注意してください デバイス Interception_waitによって返されると、コメントアウトコードがイベントを何に送信しますか? デバイス 初期化されていません!コードを忘れて、さらに基本的なものを試してください。 Interception_sendコールでループ内の線を見て、その後2つの呼び出しをさらに2つの呼び出しを行いますが、インターセプト_key_downとinterception_key_upを使用して各呼び出しの前にstreke.stateを変更することを忘れないでください。キーボードイベントごとに追加のキーが表示されます。

また、interception_filter_key_downの代わりにinterception_filter_key_allを使用してみてください。 interception_filter_key_up。矢印キーは、ウェブサイトで言及されているように特別なキーかもしれません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top