Re: キー入力ハンドルの文字変換の挙動について ( No.1 ) |
- 名前:管理人 日時:2021/11/18 13:01
ご返信が遅くなり申し訳ありません
手元で載せていただいたソースコードを実行してみましたが、
Windows8.1 の環境でも Windows10 の環境でも正常に動作しました
( IMEが無効にならず選択した文字が再変換状態になりました )
( Unicode文字セットにしても問題なく動作しました )
お使いのIMEは標準的な Microsoft IME でしょうか?
|
Re: キー入力ハンドルの文字変換の挙動について ( No.2 ) |
- 名前:しんき 日時:2021/11/18 15:36
管理人さん
平日にもかかわらずご返信いただきありがとうございます。
IMEはMicrosoft IME 2012です。
何度か試していると私の環境でもうまく動作することがあったのですが、その条件は不明です・・・。
キー入力ハンドルがアクティブになってすぐのタイミングでこの変換操作を行うと無効になりやすい気がします。
あと、最初に書込みしたときは気づかなかったのですが、デバッグビルドの時だけ起こるみたいです。
(リリースビルドで10回程試しましたが発生しませんでした。)
IMEが無効になるときの挙動は
Shiftと方向キーでテキストを選択する
↓
白背景でテキストが選択された状態になる
↓
変換キーを押す
↓
赤背景でテキストが選択され、タスクバーのIMEは×にかわっている
(変換候補が表示されてからIMEが×になることもある)
↓
赤背景のテキストが残ったままその左側に英数字が打ち込める
↓
英数字を打ち込むと赤背景のテキストはその分右に動く
(変換候補が表示されたときは英数字を打ち込むと赤背景のテキストと一緒に右に動く)
という感じです。
|
Re: キー入力ハンドルの文字変換の挙動について ( No.3 ) |
- 名前:管理人 日時:2021/11/20 16:09
ご返答ありがとうございます、
IME は標準の Microsoft IME 2012 ということで了解しました
その後何度も試したのですが、こちらの現象はどうやっても再現できませんでした
ライブラリのソースを見てみても原因となりそうな箇所が見当たらず、
申し訳ありませんが修正は少し難しそうです…
リリースビルドでは本件の現象が発生しないとのことですので、
アプリが完成して配布される際はリリースビルドで作成した実行ファイルを
使用するようにしてください m(_ _;m
|
Re: キー入力ハンドルの文字変換の挙動について ( No.4 ) |
- 名前:しんき(解決) 日時:2021/11/20 20:51
再現しませんでしたか・・・
ということは何か環境によるものなのかもしれませんね(汗
管理人さんの環境で再現しない以上対応は難しいと思いますので、
私の環境で追加で確認できたことを共有してスレッドは解決としたいと思います。
・別のPC(Windows8.1、MicrosoftIME2012)での動作
ハンドルが有効になってすぐに選択と変換を高速で行なったときのみ再現しました。
(高速で行わない限りは再現しませんでした。)
何故かこちらではリリースビルドでも再現してしまいました。
・文字セットがマルチバイト時の動作
同じように再現しました。
・SetUseTSFFlagにFALSEを渡した時の動作
正常に動作しました。
(IMEが無効になりませんでした。)
最後になりましたがソースコードの確認などしていただき大変お手数をおかけしました。
ありがとうございました。
|
Re: キー入力ハンドルの文字変換の挙動について ( No.5 ) |
- 名前:しんき(解決) 日時:2021/11/25 10:42
その後、個人的にIMEが無効になる挙動に対策ができたのでご報告します。
アプリケーションのウィンドウがアクティブかつキー入力ハンドルがアクティブな間、
SetFocus(NULL);
SetFocus(GetMainWindowHandle());
を定期的に呼んでやることでIMEが無効になっても再度有効にすることができました。
今のところ私のPCでしか確認できていない挙動ではありますが、
例えばフルスクリーンで日本語入力のクイズゲームのようなものだと
もしこの挙動が発生した際にIMEを有効に戻せなくてプレイヤーが困ると思うので、
(そんなゲームがもしあればですが)
念のため共有させていただきました。
書込み失礼しました。
|
Re: キー入力ハンドルの文字変換の挙動について ( No.6 ) |
- 名前:管理人(解決) 日時:2021/11/26 22:29
ご情報ありがとうございます
もし類似する現象が発生した際に参考にさせていただきます m(_ _)m
|