2016-05-02 7 views
0

これは、デバイスからの直接RAW入力ことになって、これはそれは、これらの設定によって影響を受けるということ奇妙である:Windowsのキーリピートの設定

enter image description here

それはまでWM_INPUTメッセージを取得することはありません遅延の後に。また、繰り返し率が影響しています。私はNO_LEGACYフラグで未処理の入力デバイスを登録してみましたが、違いはありません。これは私がこの問題を抱えているDirectX11アプリケーションです。

case WM_INPUT: {Input::handleInput(uMsg, wParam, lParam); break; } 
+0

*キーリピート*はOSの機能であり、キーボードのハードウェアではありません。 '偽の'入力が合成され、 'SendInput'がこれを行うツールになることは驚くべきことではありません。 'SendInput'で送信された入力パケットは、デバイスドライバからのパケットと同じ入力待ち行列に入ります。それはあなたが持っている問題は不明です。 – IInspectable

答えて

0

明らかにそれを回避する方法はありません、gamedevのチュートリアルでは、あなたは自分自身の複雑な回避策を使用してコードでそれを処理しなければならないと説明しました。未処理のデータを入力します。

WM_INPUTキーを押し続けると、Windowsの「キーリピート遅延」が経過するまで待ってからWindowsの「キーリピート速度」設定でキーメッセージの送信を続行します。

MakecodeまたはVkeyメンバーを使用する代わりに、keyboard.flagsメンバーを使用するほうが簡単です(ほとんどのキーの場合)キーがダウンするとこのフラグはゼロになり、 1にセットされますので、あなただけで、それを反転することができます:あなたがの反対を送信するので、あなたは0のフラグメッセージを取得し、キーを押したときに0または1の値が意味keyboard.flagを使用し

switch (mpRawInput->data.keyboard.VKey) 
     { 
     case VK_W: Input::mIsKeyDown[VK_W] = !mpRawInput->data.keyboard.Flags; break; 
     case VK_A: Input::mIsKeyDown[VK_A] = !mpRawInput->data.keyboard.Flags; break; 
     case VK_S: Input::mIsKeyDown[VK_S] = !mpRawInput->data.keyboard.Flags; break; 
     case VK_D: Input::mIsKeyDown[VK_D] = !mpRawInput->data.keyboard.Flags; break; 
     case VK_SPACE: Input::mIsKeyDown[VK_SPACE] = !mpRawInput->data.keyboard.Flags; 
     }  

それは "isKeyDown" boolになります。そのキーが持ち上げられると、フラグは1に設定されます。

他のキーのキーでは、矢印キーの値が3で、Num Lockがオンの場合は通常、オフの場合は通常です。他のキーは、 "Print Screen"や "Pause/Break"のように全く違った動作をします。どのような完全な混乱。

関連する問題