DirectInputを使うソフトにキー入力情報を送信する

Windowsで、プログラムに対してキーボード入力があったと偽るには、SendMessage, PostMessageで、対象プログラムのスレッドメッセージキューにWM_KEYDOWN/WM_KEYUP等のキーボード系メッセージを積んだり、keybd_event/SendInputでキーボードインプットストリームに入力情報を流し込むのが常套手段となっている。
しかし、対象プログラムがDirectInputを用いてキーボード入力をフェッチしている場合は別問題。メッセージキューはまず無視されるので、SendMessage/PostMessageは使えない。残るはkeybd_event/SendInputだけど、これも普通に仮想キーコードを与えただけでは、対象プログラムはうんともすんとも言わない。
何かものを言わせるためには、仮想キーコードに加えて、スキャンコードを指定する必要がある。しかし、keybd_eventではスキャンコードの指定は「使用しない」とMSDNライブラリに書かれているため、結局SendInputだけ使えることになる。(非文書化仕様では、keybd_eventでもスキャンコードを送信できるのだけど、あくまで隠し仕様なので使わない方が賢明)
http://homepage1.nifty.com/yasunari/VB/VB2005/ScreenKeyBoardMaking.htm(homepage1.nifty.com)のサンプル:スクリーンテンキーボードで書かれているSendInput周りのコードが、SendInputを用いてプログラムにスキャンコードを付加したキー入力情報を送信する手順となっている。ExtendedKeyFlagW関数で天下り的に拡張キーの判定が与えられているけど、http://community.osdev.info/index.php?%28AT%29keyboard(community.osdev.info)にあるとおり、PC/AT互換機PS/2キーボードコントローラの仕様として定められているようだ(?)。