2012-01-11 22 views
0

キーボードアクション(SendInput/SendKeys/etc)を偽装する通常の方法を試しましたが、DirectInputを使用したゲームでは動作しませんでした。多くの読書と検索の後、私はInterceptionを見つけました。あなたのデバイスにフックできる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; 
    } 

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

答えて

1

キーの押下を取得するには、UPおよびDOWN状態のキー状態を微調整する必要があります。 whileループで、変数のデバイスがinterception_waitによって返された場合、コメントアウトされたコードはイベントを何に送信するのですか? デバイスは初期化されていません!あなたのコードを忘れて、もっと基本的なものを試してみてください。 interception_sendコールでループ内の行を見て、その後2つの呼び出しを行いますが、INTERCEPTION_KEY_DOWNとINTERCEPTION_KEY_UPを使用して各呼び出しの前にstroke.stateを変更することを忘れないでください。各キーボードイベントで余分なキーを取得します。

また、INTERCEPTION_FILTER_KEY_DOWNの代わりにINTERCEPTION_FILTER_KEY_ALLを使用してみてください。 INTERCEPTION_FILTER_KEY_UP。矢印キーは、ウェブサイトで述べたように特別なものでもよい。

+0

ちょうど私が1つのキーを押すときより多くのキーを得ることであるあなたの説明の方法を明確にするには?私はキーを押すことなく実際にキーを押す方法を模索しています。たとえば、アプリケーションのボタンをクリックすると、「control + a」のキーを送信させることができます。 –

+0

これは普通のことですが、入力を偽造したいキーボードIDを特定して変数に保存するだけで済みます。この場合、デバイスIDは変数デバイスに保存されています。特定のデバイスに関連付けられたIDを知った後、必要に応じてイベントを送信できます。通常、PS/2デバイスはIDがINTERCEPTION_KEYBOARD(0)に等しくなり、USBデバイスはINTERCEPTION_KEYBOARD(1)以上になります。 –

関連する問題