2012-05-05 11 views
2

SendInputを使用してキープレスを送信するこのビットのコードはありますが、長いキーを保持したいときには機能しません(例:long a 'a' aaaaaaaaa 'をメモ帳に入れてください)。SendInputが保留キーC++で動作していない

今私はGoogleのすべてを見てきました。これを回避するために私が見ることができる唯一の方法は、長いホールドが必要な場合に入力を送信し続けることです。私はこれがちょうど "a"を何度も何度も繰り返し押すことをシミュレートするので、これをしたくありません。

keyboard.wVk = 0; 
keyboard.wScan = MapVirtualKey(key, 0); 

keyboard.dwFlags = KEYEVENTF_SCANCODE; 

if (index_vector_no) 
    pressed[index_vector_no] = true; 

keyboard.dwExtraInfo = 0; 

input.type = INPUT_KEYBOARD; 
input.ki = keyboard; 

SendInput(1, &input, sizeof (input)); 

だから私は、次の質問にいくつか答えたいと思います:

A)は、私は右の思考でこの回避する方法はSendInputを使用してありませんし、なぜそれが長い間保留のために動作しないのですか?

B)キーダウンおよびキーアップ信号を正常に送信するための代替方法は何ですか。好ましくは、特定のアプリケーションだけでなくウィンドウにキーを送ること。

C)グローバルなキーボードとマウスのシミュレーションを処理するのに使用できる軽量なC++ライブラリがありますか?

ありがとうございます! =)

EDIT:私の問題の詳細については、この記事を見てみましょう:http://www.experts-exchange.com/Programming/Languages/Visual_Basic/Q_20833788.html

+0

これはWindows用ですか? VC++を使用していますか? –

+0

複数回押してシミュレーションするのはどうですか?私がそれを考えることができる唯一の理由は違いが...窓でなければならない。 – chris

+0

はいそれは窓にあります。私はちょうど.cppファイルのエンディングで通常のC++を使用しています。私はそれが違いをもたらす場合、MinGWコンパイラを使用しています! @Chrisこれはゲームを制御するためのものですので、ジャークカーが前方に移動することになります。 – geekman92

答えて

3

はキーストロークを繰り返すキーボードコントローラのではなく、WindowsやSendInputの機能です。あなたは確かにSendInput()を繰り返し呼び出すタイマーでそれをエミュレートすることができます。

+0

hmmm ...どのくらい速く文字が繰り返されるかの限界を置くことができますか?それはキーボードがそれを送る入力のいくつかを無視するだけですか? – geekman92

+0

Windowsはキーボードコントローラの設定を変更できますが、これは双方向の接続です。コントロールパネルのキーボードアプレットから最も明白です。あなたが実際にキーボードと偽の入力を使用したくないときは無関係です。 –

+0

それは私のためにいくつかのものをクリアしました!ありがとう! =) – geekman92

関連する問題