スキャン コードは、キーボードから返される生のキー ID です。したがって、101 キーのキーボードには (理論上) 101 個の一意のスキャン コードが返されます。(脚注1を参照)
仮想キー コードは、理想化されたキーボードのキーを表す個別のコード セットです。実際のキーボードのどこに TAB キーがあり、どのスキャンコードが使用されていても、仮想キー コードは常に VK_TAB です。 windows.h
印刷できない仮想キーの VK_xxx コードを定義します。印刷可能な仮想キーの場合、仮想キー コードは ASCII 値と同じです。
ただし、仮想キー コードは引き続きキー コードです。「A」と「a」は同じ仮想キー コードを持っているため、「A」を送信する場合は、VK_SHIFT を下に送信し、次に「a」を下に送信し、次に「a」を上に送信し、次に VK_SHIFT を上に送信する必要があります。
VkKeyScanEx()
文字をスキャン キーとシフト状態に変換します。このページの以下の引用を参照してください
関数が成功した場合、戻り値の下位バイトには仮想キー コードが含まれ、上位バイトにはシフト状態が含まれます。これは、次のフラグ ビットの組み合わせである可能性があります。
そのため、VkKeyScanEx() からの戻り値をそのまま取得することはできません。Shift キーにフラグが立てられているかどうかを確認する必要があります。シフトキーを別のキーストロークとして送信します
SHORT vk = VkKeyScanEx(c, ...);
if (vk & 0x100) // check upper byte for shift flag
{
// send a shift key down
}
if (vk & 0x200) // check for ctrl flag
{
// send a ctrl key down
}
input.ki.wVk = vk & 0xFF;
// send keyup for each of the keydown
また、キーダウンごとにキーアップを送信する必要があります。
脚注:
1これはあくまでも理論上の話であり、実際には、標準の PC キーボードは、もう入手することさえできない古い IBM キーボードをエミュレートします。同じスキャンコード。