任务单 #30664

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

开放日期: 2013-02-02 14:20 最后更新: 2014-09-24 10:26

报告人:
属主:
(无)
状态:
开启
组件:
(无)
里程碑:
(无)
优先:
5 - Medium
严重性:
5 - Medium
处理结果:
文件:

Details

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

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

追記(2014年9月24日):

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

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

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

任务单历史 (3/3 Histories)

2013-02-02 14:20 Updated by: nishimoto
  • New Ticket "エディットボックスに入ったときにIME状態の通知を" created
2013-10-20 11:57 Updated by: 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 Updated by: nishimoto
  • Details Updated

Attachment File List

No attachments

编辑

Please login to add comment to this ticket » 登录名