YouTube_Microsoft IMEの単語登録を複数PCで共有|辞書の更新をほぼ自動化

YouTubeでお伝えしたAutoHotkeyのコードはこちらです。

ご活用いただければ。

AutoHotkeyの使い方

こちらの記事をご参照ください。

使い方

以下のコードをベースに、カスタマイズしてください。

コード詳細
#Requires AutoHotkey v2.0

; 無変換キー単体では何もしない
sc07B::Return

; 無変換 + T:IME辞書TXTを読み込む
sc07B & t::ImportImeDictionary()

ImportImeDictionary() {
    imeTool := "C:\Windows\System32\IME\IMEJP\IMJPDCT.EXE"
    dictFile := A_UserProfile "\OneDrive\00.Inbox\IME_辞書ツール.txt"

    if !FileExist(dictFile) {
        MsgBox "IME辞書TXTが見つかりません。`n`n" dictFile
        return
    }

    ; IMEユーザー辞書ツールを開く
    imeHwnd := WinExist(
        "Microsoft IME ユーザー辞書ツール ahk_exe IMJPDCT.EXE"
    )

    if !imeHwnd {
        Run '"' imeTool '" -t'

        imeHwnd := WinWait(
            "Microsoft IME ユーザー辞書ツール ahk_exe IMJPDCT.EXE",
            ,
            5
        )
    }

    WinActivate "ahk_id " imeHwnd
    WinWaitActive "ahk_id " imeHwnd

    ; 現在開いているダイアログを記録
    dialogsBefore := GetImeDialogs()

    ; 「テキスト ファイルからの登録」を実行
    if !RunImeImportMenu(imeHwnd) {
        MsgBox "「テキスト ファイルからの登録」が見つかりませんでした。"
        return
    }

    ; ファイル選択画面を待つ
    fileDlg := WaitForNewImeDialog(dialogsBefore)

    if !fileDlg {
        MsgBox "ファイル選択画面を確認できませんでした。"
        return
    }

    WinActivate "ahk_id " fileDlg
    WinWaitActive "ahk_id " fileDlg

    ; TXTファイルを指定
    Send "^l"
    Sleep 150
    SendText dictFile
    Sleep 150
    Send "{Enter}"
}


; 「テキスト ファイルからの登録」メニューを実行
RunImeImportMenu(hwnd) {
    hMenu := DllCall("GetMenu", "Ptr", hwnd, "Ptr")

    if !hMenu
        return false

    topCount := DllCall("GetMenuItemCount", "Ptr", hMenu, "Int")

    Loop topCount {
        hSubMenu := DllCall(
            "GetSubMenu",
            "Ptr", hMenu,
            "Int", A_Index - 1,
            "Ptr"
        )

        if !hSubMenu
            continue

        subCount := DllCall(
            "GetMenuItemCount",
            "Ptr", hSubMenu,
            "Int"
        )

        Loop subCount {
            position := A_Index - 1
            menuText := GetMenuText(hSubMenu, position)

            if InStr(menuText, "テキスト ファイルからの登録") {
                menuId := DllCall(
                    "GetMenuItemID",
                    "Ptr", hSubMenu,
                    "Int", position,
                    "UInt"
                )

                PostMessage 0x0111, menuId, 0, , "ahk_id " hwnd
                return true
            }
        }
    }

    return false
}


GetMenuText(hMenu, position) {
    buf := Buffer(1024, 0)

    length := DllCall(
        "GetMenuStringW",
        "Ptr", hMenu,
        "UInt", position,
        "Ptr", buf.Ptr,
        "Int", 512,
        "UInt", 0x0400,
        "Int"
    )

    return length > 0 ? StrGet(buf.Ptr, length, "UTF-16") : ""
}


GetImeDialogs() {
    dialogs := Map()

    for hwnd in WinGetList(
        "ahk_class #32770 ahk_exe IMJPDCT.EXE"
    )
        dialogs[hwnd] := true

    return dialogs
}


WaitForNewImeDialog(dialogsBefore, timeoutSeconds := 5) {
    endTime := A_TickCount + timeoutSeconds * 1000

    while A_TickCount < endTime {
        for hwnd in WinGetList(
            "ahk_class #32770 ahk_exe IMJPDCT.EXE"
        ) {
            if !dialogsBefore.Has(hwnd)
                return hwnd
        }

        Sleep 100
    }

    return 0
}

OneDrive上にIME辞書用のTXTファイルを置き、各PCから同じファイルを読み込みます。
TXTを更新したあと、「無変換+T」を押すだけでMicrosoft IMEへ反映できます。


1.AutoHotkey v2をインストール

このコードはAutoHotkey v2用です。
AHKファイルを実行できる状態にしておきます。

2.OneDrive上に辞書用TXTを作成

OneDrive内の好きな場所に、IME辞書用のTXTファイルを作成します。

IME_辞書ツール.txt

3.TXTに単語を登録

1行につき、次の3項目を入力します。

よみ[TAB]単語[TAB]品詞

たとえば、次のように記載します。

お	おはよう	短縮よみ
よ	よろしくお願いします	短縮よみ

ポイント
項目の区切りにはスペースではなく、Tabキーを使います。

4.AHKコードのファイルパスを変更

コード内の次の部分を、自分が作成したTXTファイルの場所に合わせて変更します。

dictFile := A_UserProfile "\OneDrive\フォルダ名\IME_辞書ツール.txt"

OneDrive直下に置く場合は、たとえば次のようにします。

dictFile := A_UserProfile "\OneDrive\IME_辞書ツール.txt"

5.AHKファイルを実行

コードを.ahkファイルとして保存し、AutoHotkeyで実行します。
すでにAutoHotkeyを使っている場合は、既存のAHKファイルに追加してもOKです。

6.単語を追加したら「無変換+T」

TXTファイルに単語を追記して上書き保存します。

TXTを編集・保存
↓
無変換+T
↓
Microsoft IMEへ登録

「無変換+T」を押すとMicrosoft IMEユーザー辞書ツールが開き、 指定したTXTファイルから単語が読み込まれます。

7.複数PCで同じ設定をする

他のPCでも同じOneDriveを同期し、同じAutoHotkeyコードを設定します。

以後は、OneDrive上のTXTファイルだけを更新しておけば、 各PCで「無変換+T」を押すことで同じ単語リストを反映できます。


注意点

Microsoft IMEのユーザー辞書そのものをリアルタイム同期する仕組みではありません。
OneDrive上のTXTを共通の元データとして使い、それぞれのPCのIMEへ読み込む方法です。

関連記事