エディットボックスに入ったときにIME状態の通知を
本チケットに関して後述のグローバルプラグインを書いてみましたが、うまくいかなかったという記録です。
NVDA メニューの中のエディットコントロールではうまく動くのですが、メモ帳などのアプリでは失敗します。
下記に書いてあること(プロセスをまたいで ImmGetContext ができないという制約)のためと思われます。
# 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()
nvdajp-team 1238 で下記のご提案をいただきました。
追記(2014年9月24日):
匿名ユーザーからこのチケットへの無意味なコメント書き込み(いわゆるコメントスパム)が続いています。
無意味にこのチケットのメールが繰り返し配信されてしまっていることをお詫びします。
こまめに削除とスパム報告を行うように心がけていますので、ご理解いただければ幸いです。