Ticket #30664

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

Open Date: 2013-02-02 14:20 Last Update: 2014-09-24 10:26

Reporter:
Owner:
(None)
Status:
Open
Component:
(None)
MileStone:
(None)
Priority:
5 - Medium
Severity:
5 - Medium
Resolution:
None
File:
None

Details

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

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

追記(2014年9月24日):

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

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

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

Ticket History (3/3 Histories)

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

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

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

Edit

Please login to add comment to this ticket » Login