そろそろダイソーは SD メモリカードとかUSBメモリを
売ってもいい頃だと思う。
512MB を 515円ぐらいならいけんじゃね? とか思ったりするんだけどなあ…
そろそろ 0.12.0 が…
これ書いてる時点で 0.12.0-rc1 はリリースされてるし、ちょっと前に rc2 分の Changelog も入ったのできっと今年じゅうには 0.12.0 正式版とか出るんだろうなー、とは思う。
しかし 0.12.0 はソースツリーから kqemu 関連のコードが(すでに予告されていたように)ごっそり削除されているので Win32 プロパーな観点からするとますます微妙な感じであります。
俺と Win32 コンソール(3):とりあえず IME のオン/オフとかやってみる
まあ Alt+漢字のキーストロークを keybd_event で叩き込むだけでいけるんですが。
void ToggleIMEStateByKeyStroke(void) { /* キー注入結果を反映させるための待ち(手元の環境では単なる Yield 扱いの 0 でも問題なさそうだった。環境によってはもっと大きめの値がいるかも) */ const DWORD dwYieldMSecForKey = 1; keybd_event(VK_MENU, 0 /* 0x38 */, 0, 0); /* down Alt */ keybd_event(VK_KANJI, 0 /* 0x29 */, 0, 0); /* down Kanji */ keybd_event(VK_MENU, 0 /* 0x38 */, KEYEVENTF_KEYUP, 0); /* up Alt */ keybd_event(VK_KANJI, 0 /* 0x29 */, KEYEVENTF_KEYUP, 0); /* up Kanji */ Sleep(dwYieldMSecForKey); /* wait for a proof */ }
ただ、コンソールウィンドウ自身がキー入力のフォーカスを持っていないと、よそのウィンドウの IME が開いたり閉じたりしちゃう罠。とりあえず GetConsoleWindow() == GetForegroundWindow() の確認が必要です。
あともうひとつの問題は、コンソールウィンドウの場合、現在の IME のモードを確実に判定する方法がどうも存在しないっぽいことです。IME 系の API で問い合わせてもダメだしなあ(実は Win9x なら取れるのだが)…
いろいろ悪あがきしてみたけど「確実」にはほど遠い。一応それらしいソースも晒してみます。
続きを読む