>>359 の内容に誤りがあったので訂正します
WM_INPUTLANGCHANGEREQUESTを受け付けるかどうかにIMEは一切関係ありませんでした
問題点は、どこにメッセージを送るか? 現在のフォーカスがどこにあるか? の2点だけでした

ほとんどのアプリはウィンドウへのポストで変更を受け付けます。それ以外の一部のアプリは親ウィンドウのトップコントロールでメッセージを受け付けるようです
現在のフォーカスについては359の最下部の内容で多分間違いはありません。この2点はWM_INPUTLANGCHANGEREQUEST以外のウィンドウメッセージでも同様であると思われます


また、>>364での指摘されている件で取得したILId(Input Locale Identifier、旧名: HKL)が>= 0x8000000の場合
負数になると言うことですが、つまり、4バイト符号付き16進数として扱われると言うことになります
対象が32bitアプリである場合は4バイトでの処理なので変換の必要はありませんが64bitアプリでは8バイトで処理されるので実際には
0x040A0C0A → 0x00000000040A0C0A → 67767306
0xE0200411 → 0xFFFFFFFFE0200411 → -534772719
と言う扱いになります。したがって、10進数に変換せずとも上記のようにFFで上位4バイトを埋めるか、次のような処理を挟めば良いと言うことになります
ILId := 0xE0200411
if ILId > 0x7FFFFFFF
ILId |= 0xFFFFFFFF00000000


ということで更新する気はなかったのですが、前提に誤りがあったので上記の件を踏まえたスクリプトを置いておきます
多分ですが環境に関係なく、全てのアプリに対して動作すると思います

v2 入力ロケール変更関数
https://pastebin.com/QUJCZBb4