トップページ > 記事閲覧
キー入力ハンドルの文字変換の挙動について
名前:しんき 日時: 2021/11/16 00:23

いつも大変便利に利用させていただいております。 MakeKeyInputで作成したキー入力ハンドルに対して Shiftキーを押しながら方向キーで文字列を選択 ↓ 変換キーを押す の手順で文字を変換しようとするとIMEが無効になってしまいます。 解決方法がわからないため質問させていただきました。 以下にソースコードを載せておきます。 #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { //ウィンドウモードで起動 ChangeWindowMode(TRUE); // DXライブラリ初期化処理 if (DxLib_Init() == -1) { return -1; // エラーが起きたら直ちに終了 } //IMEを有効化 SetUseIMEFlag(TRUE); //キー入力を作成 int keyinputhandle = MakeKeyInput(9,FALSE,FALSE,FALSE); SetKeyInputString(_T("テスト"), keyinputhandle); SetActiveKeyInput(keyinputhandle); //描画先を設定 SetDrawScreen(DX_SCREEN_BACK); //キー入力がアクティブな間ループする while (GetActiveKeyInput() == keyinputhandle) { ClearDrawScreen(); DrawKeyInputString(0, 0, keyinputhandle, TRUE); if (ProcessMessage() == -1) { break; // エラーが起きたらループを抜ける } ScreenFlip(); } // DXライブラリ使用の終了処理 DxLib_End(); return 0; // ソフトの終了 } DXライブラリのバージョンは3.22eで、Unicode文字セットを使用しています。 実行した環境はWindows8.1です。 よろしくお願いいたします。
メンテ

Page: 1 |

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
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存