チケット #30664

エディットボックスに入ったときにIME状態の通知を

登録: 2013-02-02 14:20 最終更新: 2014-09-24 10:26

報告者:
担当者:
(未割り当て)
チケットの種類:
状況:
オープン
コンポーネント:
(未割り当て)
マイルストーン:
(未割り当て)
優先度:
5 - 中
重要度:
5 - 中
解決法:
なし
ファイル:
なし

詳細

nvdajp-team 1238 で下記のご提案をいただきました。

  • 例えば日本語入力をオフにするのを忘れてメールアドレスを入れてしまうような失敗を防ぎたい
  • エディットボックスに入ったとき、IMEがオンになっているときはそれを通知してくれると便利
  • 常に状態を出力しなくても、日本語IMEがオンになっているときだけでいい

追記(2014年9月24日):

匿名ユーザーからこのチケットへの無意味なコメント書き込み(いわゆるコメントスパム)が続いています。

無意味にこのチケットのメールが繰り返し配信されてしまっていることをお詫びします。

こまめに削除とスパム報告を行うように心がけていますので、ご理解いただければ幸いです。

チケットの履歴 (3 件中 3 件表示)

2013-02-02 14:20 更新者: nishimoto
  • 新しいチケット "エディットボックスに入ったときにIME状態の通知を" が作成されました
2013-10-20 11:57 更新者: nishimoto
コメント

本チケットに関して後述のグローバルプラグインを書いてみましたが、うまくいかなかったという記録です。

NVDA メニューの中のエディットコントロールではうまく動くのですが、メモ帳などのアプリでは失敗します。

下記に書いてあること(プロセスをまたいで ImmGetContext ができないという制約)のためと思われます。

http://social.msdn.microsoft.com/Forums/en-US/8a781fb0-ba77-48cd-89c1-b210266ba7cb/immgetcontext-always-returns-null

# work around nvdajp ti30664
# by Takuya Nishimoto
import globalPluginHandler
import controlTypes
import tones
from ctypes import windll
import api

_imm32 = windll.imm32

def getLastImeStatus():
	hwnd = api.getFocusObject().windowHandle
	if hwnd == 0:
		return None
	himc = _imm32.ImmGetContext(hwnd)
	ret = None
	if himc:
		ret = _imm32.ImmGetOpenStatus(himc)
		_imm32.ImmReleaseContext(hwnd, himc)
	return ret

class GlobalPlugin(globalPluginHandler.GlobalPlugin):
	def __init__(self, *args, **kwargs):
		globalPluginHandler.GlobalPlugin.__init__(self, *args, **kwargs)

	def event_gainFocus(self, obj, nextHandler):
		if obj.role == controlTypes.ROLE_EDITABLETEXT:
			s = getLastImeStatus()
			if s is not None:
				if s:
					tones.beep(1000, 10)
				else:
					tones.beep(500, 10)
		nextHandler()
2014-09-24 10:26 更新者: nishimoto
  • 詳細が更新されました

添付ファイルリスト

添付ファイルはありません

編集

このチケットにコメントを追加するには、ログインが必要です » ログインする