LoginSignup
0
0

More than 1 year has passed since last update.

日記 Visual Studio 2019 C++ 他のアプリケーションのIME状態を取得、ON/OFFの切り替えをする

Last updated at Posted at 2021-08-02

日記

前回の日記 日記 Visual Studio 2019 C++でSetTimerで定期実行する処理の書き方

概要

他のアプリケーションのIMEの状態を「ImmGetContext, ImmGetOpenStatus, ImmSetOpenStatus, ImmReleaseContext」を使用して取得/変更できずに困っていたところ、imm32.dllのImmGetDefaultIMEWndでIMEのハンドルを取得し設定できる事を知った。

参考になったサイト
IMEの状態をAutoHotkeyから知る方法(ジャンキー/ノンプログラマー流)

手順

リンカーにimm32.libを設定

  • メニュー - プロジェクト(P) - プロジェクトのプロパティを開く
  • 左ペインの構成プロパティ - リンカー - コマンドラインを選択
  • 「構成(C)」のデバッグとリリース両方とも「追加のオプション(D)」に「imm32.lib」を追加

image.png

include追加

Sample.cpp
#include <imm.h>

処理

例、フォアグラウンドアプリのIMEがONの場合、OFFにする

Sample.cpp

// フォアグラウンドアプリのハンドル取得
HWND hActWin = GetForegroundWindow();
if (hActWin)
{
    // フォアグラウンドアプリのIMEハンドルを取得
    HWND hIMEWnd = ImmGetDefaultIMEWnd(hActWin);
    if (hIMEWnd)
    {
        // IMEの状態取得
        LRESULT imeStatus = SendMessageA(hIMEWnd, WM_IME_CONTROL, DFCS_SCROLLCOMBOBOX, 0);

        // IMEがONだったらOFFにする
        if (imeStatus)
        {
            // 0x006 は IMC_SETOPENSTATUS
            // 第4引数を0でIMEをOFF(1でON)
            SendMessageA(hIMEWnd, WM_IME_CONTROL, 0x006, 0);
        }
    }
}
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0