2017-07-14 7 views
0

私はいくつかのキーストロークを自動化するためにSendInputを使用しようとしています。簡単なテスト(メモ帳を開いてストロークが起こるのを見る)では、ストロークはうまく動作します。しかし、この入力を特定のアプリケーションに送信しようとすると、SendInputは特定のキーの最初のインスタンスに対してのみ機能します。だから、私はSpaceを一度送ることができます。次にSpaceを送信しようとすると、実際には送信されません。 (他のアプリケーションで送信されても​​)それから私はAを一度送信することができますが、次回はAを送信しようとすると送信しません。等々。キーの各インスタンスの後にSendInputが機能しなくなる原因は何ですか?

私は何かを実行している権限の問題ですか?最初の入力はうまく動作しますが、同じキーを押した後は入力しません。

public static void PressEnter() 
    { 
     INPUT[] Inputs = new INPUT[1]; 
     INPUT Input = new INPUT(); 

     Input.type = 1; // 1 = Keyboard Input 
     Input.U.ki.wScan = ScanCodeShort.RETURN; 
     Input.U.ki.dwFlags = KEYEVENTF.SCANCODE; 
     Inputs[0] = Input; 

     uint returnInput = SendInput(1, Inputs, INPUT.Size); 

     Console.WriteLine(returnInput); 
    } 

は、私が注目し、メモ帳で何度もこれを繰り返すことができ、そしてリターンが連続して行われます。

は、もう少し物質を提供するために、ここではすべての標準の構造体を想定し、例示的な方法です。しかし、これをこの特定のアプリケーションに何度も送信すると、最初のものだけが通過します。しかし、私はキーボードのEnterキーを押すことができます。アプリケーションがSendInputからの入力を拒否することは可能ですか?

+0

どのアプリケーションにキーストロークを送信しようとしていますか? – spender

+0

このアプリケーションは、私が自動化に取り組んでいるソフトウェアを保持している複雑なレコードです(以前はSendInputと一緒に作業していたため、この。 – Branden

+0

あなたはSpace、A、Then Spaceを送ったときに何が起こるのですか? –

答えて

0

ここkeyUpイベントフラグをシミュレートするための一つの方法は、

INPUT input[4]; 

input[0].type = INPUT_KEYBOARD; 
input[0].ki.wVk = 0; 
input[0].ki.wScan = ScanCodeShort.RETURN; 
input[0].ki.dwFlags = 0; 

input[1].type = INPUT_KEYBOARD; 
input[1].ki.wVk = 0; 
input[1].ki.wScan = ScanCodeShort.RETURN; 
input[1].ki.dwFlags = KEYEVENTF_KEYUP; 

input[2].type = INPUT_KEYBOARD; 
input[2].ki.wVk = 0; 
input[2].ki.wScan = ScanCodeShort.RETURN; 
input[2].ki.dwFlags = 0; 

input[3].type = INPUT_KEYBOARD; 
input[3].ki.wVk = 0; 
input[3].ki.wScan = ScanCodeShort.RETURN; 
input[3].ki.dwFlags = KEYEVENTF_KEYUP; 

SendInput(4, input, sizeof(INPUT)); 

INPUT_KEYBOARDが入力されています

KEYEVENTF_KEYUPを使用すると、複数のキーストロークを送信することができます。このようにして、keyUpイベント

をシミュレートします。試してみてください。

+0

実際には正しいですか、キーアップをシミュレートしたことがないので、アプリケーションがキーダウン状態になっていたと思います。キーアップをシミュレートするために2番目の入力を追加した後、すべてが完全に動作します。正しい方向に私を指してくれてありがとう。 – Branden

+0

あなたはそれがうまくいった! :) –

関連する問題