明らかにそれを回避する方法はありません、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"のように全く違った動作をします。どのような完全な混乱。
*キーリピート*はOSの機能であり、キーボードのハードウェアではありません。 '偽の'入力が合成され、 'SendInput'がこれを行うツールになることは驚くべきことではありません。 'SendInput'で送信された入力パケットは、デバイスドライバからのパケットと同じ入力待ち行列に入ります。それはあなたが持っている問題は不明です。 – IInspectable