IME の入力モードの変更ほうほうについて への返答

投稿で使用できる特殊コードの説明。(別タブで開きます。)
本名は入力しないようにしましょう。
投稿した後で削除するときに使うパスワードです。返答があった後は削除できません。
返答する人が目安にします。相手が小学生か社会人かで返答の仕方も変わります。
最初の投稿が質問の場合、質問者が解決時にチェックしてください。(以降も追加書き込み・返信は可能です。)
※「過去ログ」について書くときはその過去ログのURLも書いてください。

以下の返答は逆順(新しい順)に並んでいます。

投稿者 N88-BASIC  (社会人) 投稿日時 2020/6/27 20:30:34
魔界の仮面弁士  さん、ご連絡ありがとうございました。
また、返信が遅くなり申し訳ありません。

API に関しては、数度の経験しかないのでどういうコードを組めばいいのか試行錯誤している状態です(特に特定のアプリに対するものではない、Windows 全体への設定なるため)。

また、ご指摘のあった Windows 10 V2004 でも、旧バージョンの利用設定もあるようですが開発マシンも Ver 2004 にしてから一部の機能(IME以外)が不安定で、まだまだ、道のりは遠そうです。

色々と試してから、改めて、ご報告させていただきます。

今後ともよろしくお願いします。
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/6/23 22:40:39
> ImmSetConversionStatus / SetInputScope  などの API 処理が必要になると思います。

…と書いてみたものの、 SetInputScope では要件を満たせなさそうです。

この API に渡せる値は InputScope.h で定義されているのですが、
見た限り、ローマ字入力制御については含まれていないように見えました。
https://docs.microsoft.com/en-us/windows/win32/api/inputscope/ne-inputscope-inputscope

上記のうち、主要な値については参照設定:PresentationCore の InputScopeNameValue でも定義されています。
https://docs.microsoft.com/ja-jp/dotnet/api/system.windows.input.inputscopenamevalue

' Imports System.Runtime.InteropServices 
<DllImport("Msctf", PreserveSig:=False)>
Private Shared Sub SetInputScope(hwnd As IntPtr, inputscope As System.Windows.Input.InputScopeNameValue)
End Sub


一方、 ImmSetConversionStatus / ImmGetConversionStatus API の方は、
IME_CMODE_ROMAN のビットフラグが使えるかもしれません。

ただし、最近の OS でも使えるかは分かりません。(未調査)
特に Win10 v2004 では、Microsoft IME が刷新されていますしね…。

#define IME_CMODE_ALPHANUMERIC          0x0000
#define IME_CMODE_NATIVE                0x0001
#define IME_CMODE_CHINESE               IME_CMODE_NATIVE
#define IME_CMODE_HANGUL                IME_CMODE_NATIVE
#define IME_CMODE_JAPANESE              IME_CMODE_NATIVE
#define IME_CMODE_KATAKANA              0x0002  // only effect under IME_CMODE_NATIVE
#define IME_CMODE_LANGUAGE              0x0003
#define IME_CMODE_FULLSHAPE             0x0008
#define IME_CMODE_ROMAN                 0x0010
#define IME_CMODE_CHARCODE              0x0020
#define IME_CMODE_HANJACONVERT          0x0040
投稿者 魔界の仮面弁士  (社会人) 投稿日時 2020/6/23 17:49:45
ImmSetConversionStatus / SetInputScope  などの API 処理が必要になると思います。

http://www7a.biglobe.ne.jp/~tsuneoka/win32tech/7.html
https://social.msdn.microsoft.com/Forums/windows/ja-JP/405e7da1-c2b8-4057-a568-8a20c33af181/
投稿者 N88-Basic  (社会人) 投稿日時 2020/6/23 10:01:33
Windows 10 Home(64) Ver 2004 + Visual Studio 2019 にてアプリを作成しておりますが、

IME の入力モードを [ローマ字入力] と [かな入力] の切り替え方法がわかりません。
SendKeys で可能と思ったのですが、「カタカナ/ひらがな/ローマ字」 キーの設定に関する情報が見つかりませんでした。

[ALT] + 「カタカナ/ひらがな/ローマ字」を操作すれば済むことですが、この操作が上手くできな人がいるのでアプリでできないかと考えています。対象マシンは現在は Ver1909 ですが、そのうち Ver2004 が降ってきそうです。

情報をお持ち下さればご教授ください。