chuntaro/NTEmacs64

Windows 8 MS-IME problem

Hamayama opened this issue · 5 comments

Windows 8 のPCで使用していますが、漢字キーを押してもMS-IMEの日本語入力に切り替わりません。
emacs-24.4-IME-patched.zip と emacs-24.4-IME-patched-generic-cpu.zip の両方で発生します。

現象としては、以下のページの内容に近いようです。
http://blechmusik.hatenablog.jp/entry/2013/07/08/023920
http://sourceforge.jp/projects/gnupack/forums/22824/34508/
同じ現象は、下記のページの emacs-24.4-simple-ime.zip でも発生します。
http://cha.la.coocan.jp/doc/NTEmacs.html

今のところ回避策としては、Emacsの起動後に以下のいずれか1つの操作を行えば、日本語入力可能になります。
(1)マウスでウィンドウを移動する。
(2)マウスでウィンドウをリサイズする。
(3)メニューバーが表示されていれば、F10キーを2回押す。

それで、(3)の操作に近いものを自動で行えないかと考えて、
.emacs.d フォルダに sendesc.js というファイルを以下の内容で作成しました。

var shell = new ActiveXObject("WScript.Shell");
WScript.Sleep(100);
shell.SendKeys("{ESC}");
shell = null;

そして、init.el の最後に以下の記述を追加しました。

;; ***** for MS-IME *****
(menu-bar-open)
(defun send-esc ()
  (start-process "my-proc" nil "cscript.exe"
                 (expand-file-name "~/.emacs.d/sendesc.js")))
(add-hook 'emacs-startup-hook 'send-esc)

こうすると、自分の環境では日本語入力可能になりました。
ただし、起動時にメニューバーを表示しておく必要があります。
また、自分の環境ではSleep時間を50msecにすると効果がなかったので、
環境によってSleep時間の調整が必要かもしれません。

確認環境
OS : Windows 8 (64bit)
CPU : Core i5
IME : MS-IME 2012

報告ありがとうございます。
NTEmacs64のビルド環境はWindows7で動作確認もWindows7のみでした。
近々Windows8の環境を整える予定なのでその際に検証してみます。
回避作を見るとウィンドウフォーカスの問題な気がするので…runemacs.exeではなく直接emacs.exeを起動した時にどうなるかが気になります。
自分のほうで何か分かったら追記します。

長期間放置していて申し訳ありませんでした。
その後Windows8へは移行する事はなくWindows10へ移行してしまいました。
ひとまずWindows10で確認してみたしたが、指摘された現象は発生しませんでした。
もはや現状では対処する事も難しい為、こちらの件はクローズさせて頂きます。すみません。

クローズの件、了解です。

本件、その後情報があり、
言語の詳細設定の「アプリウィンドウごとに異なる入力方式を設定する」
にチェックを入れていると、発生するようです。

この設定は、複数のIMEを、アプリごとに切り換えて使用するときに、チェックを入れるもののようです。
(Windows 8 のときは、MS-IME の ON/OFF 状態を、アプリごとに別々の状態にするかどうかの設定でしたが、
Windows 8.1 の頃に仕様が変わりました。Windows 10 にも 8.1 と同じ仕様で残っているようです。)

今はチェックをはずして、正常に使えています。ありがとうございます。

<参考URL>

詳細な説明ありがとうございます。
なるほど、そういう事ですか…
問題を共有する為に README.md の注意事項にこちらの issue を追記しました。

ここに書かれている回避方法がたいへん有用でしたので,ご報告させていただきます.

いままでまったく問題なく日本語 IM が起動できていたのですが,先日の(2018年 5月 2日の) Windows Update を適用したあとにこの現象が発生するようになりました.おそらくは,「Windows 10、バージョン 1803 の機能更新プログラム」で何か変わったのだろうと思います.

言語の詳細設定(キーボードの詳細設定)の「アプリウィンドウごとに異なる入力方式を設定する」は,チェックをはずしてあります.以前と変えていません.
日本語 IM は,Google 日本語入力をデフォルトの IM に設定しています.これも,以前と変えていません.

そして,ここに書かれている回避方法で無事に回避できました.3とおりのどれでも回避できました.

(1)マウスでウィンドウを移動する。
(2)マウスでウィンドウをリサイズする。
(3)メニューバーが表示されていれば、F10キーを2回押す。

また,それを自動化する .js, .el でも同様に回避できました.
ただ,私の環境が重たいのか,
WScript.Sleep();
でのスリープは 200msec 以上でないと効き目がありませんでした.