2011-07-09 11 views
1

スキャンコードに関する質問があります。 OKです。私のアプリケーションにスキャンコードを送信してください

私はC言語で簡単なウィンドウを作成++と私は唯一の(VK_UP値)WM_KEYUPを検出したい

今、私はスパイを実行する++と私は今、もしこの

keydown vk_up crepeat1  scancode 48  extended1  altdown0  frepeat1  up0  

のように私のメッセージを検出し、キーを押してください私は自分のアプリケーションにメッセージを送ります。次のメッセージが表示されます。

SendMessage (wnd , WM_KEYDOWN , VK_UP ,1); 

keydown vk_up crepeat1  scancode 00  extended0  altdown0  frepeat1  up0 

スキャンコードとその他の値が異なっています。

なぜ私は同じメッセージを送信するのですか? 2は、(私のアプリケーションにし、他の値と同じ値を取得する)スキャンコードを送信するためにどのような方法では、なぜ違い

答えて

1

わからないが存在していますが、キーストロークを合成するためにkeybd_eventまたはSendInput機能を使用することができます。

+0

ありがとうございますが、keybd_eventまたはSendInputは両方とも他のウィンドウに値を送信します。私は自分のアプリケーションにメッセージを指定したい – user722528

1

WM_KEYDOWNのドキュメントを確認してください。スキャンコードは、LPARAM引数のビット16〜23に含まれています。 1を渡すと、スキャンコードビットはすべてゼロになります。

これは大丈夫です。実際にスキャンコードを確認するアプリはあまりありません。しかし、SendMessage()を使用することは正しくありません。キーボードメッセージはメッセージキューに入ります。 PostMessage()を使うべきです。違いは、多くのメッセージループは、アクセラレータ(別名ショートカットキー)を実装するためにキーストロークを見ていることです。 TranslateMesssage()を呼び出して、キーを入力するためのWM_CHARメッセージでWM_KEYDOWNメッセージを有効にします。

解決できない問題がもう一つあります。キーボードの状態を制御することはできません。 Ctrl、Alt、Shiftの各修飾子。 Shiftキーを押したままにしてしまうと、Shift + Upが表示され、非常に異なった解釈をする可能性があります。 SendInput()を使用することだけがそのための治療法です。

1
SendMessage (wnd , WM_KEYDOWN , VK_UP ,0x00480001); 
関連する問題