2017-07-10 1 views
-1

2番目のパラメータ(bScan)には少し問題があります。keybd_event()bScanコードの検索方法

私の目標は、各ボタンに適したbScanコードを見つけることです。

VOID WINAPI keybd_event(
    _In_ BYTE  bVk, 
    _In_ BYTE  bScan, 
    _In_ DWORD  dwFlags, 
    _In_ ULONG_PTR dwExtraInfo 
); 

keybd_event function Microsoft

私は、キー5のためのボタンがbScancode持っていることを読んだことがある - 六角番号:0x86でを。しかし、私は非常にbScanコードを見つける方法に興味があります。

KeyCode = '5' 
keybd_event(VkKeyScan(KeyCode), 0x86, 0, 0); // ‘5’ Press 
keybd_event(VkKeyScan(KeyCode), 0x86, KEYEVENTF_KEYUP, 0); // ‘5’ Release 

関数MapVirtualKey()は興味深い見てきましたが、残念ながら私はので、私は何かを誤解だと思う5の出力を取得します。誰かが私を啓発するだろうか?どうもありがとうございました。

UINT scanCode = MapVirtualKey('5', MAPVK_VK_TO_VSC); 
+0

ドキュメントの先頭に「廃止予定」という大きな警告がありますか?スキャンコードは[簡単に検索する]ことができます(https://msdn.microsoft.com/en-us/library/aa299374(v = 60).aspx)。 –

+0

こんにちはコーディグレイ、あなたの答えに感謝します。あなたは私が "廃止された"警告を見逃している:Dだから私はSendInputを使用すると思います。まだ理解しています。このbScancodeをリクエストする可能性はありますか?だから私はすべてのbScancodesと別のリストを作成する必要があります、私は正しい表示されますか? – Lendoria

+0

スキャンコードをまったく処理する必要はありません。代わりに仮想キーコードを使用して、OSが翻訳するようにしてください。あるいは、 'SendInput()'の場合、代わりに実際のUnicodeテキストを使うこともできます。 –

答えて

0

スキャンコードはお使いのハードウェアによって異なります。 5/%は通常0x06で、MapVirtualKey('5', MAPVK_VK_TO_VSC)は実際に私のマシンで0x06を返します。

キーが解放されるときにトップビット(0x80)が設定されるため、5のキーコードのスキャンコードは0x06で、キーアップは0x86です。