投稿者 魔界の仮面弁士  (社会人) 投稿日時 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