Ticket #31261

フォーカス位置のハイライト機能

Open Date: 2013-05-01 19:27 Last Update: 2013-12-15 11:32

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

Details

NVDA でフォーカス位置をハイライトする機能をどう実装するか調査をしています。

Windows 8 環境で下記のパッチにより、UI オートメーションを使って、フォーカスが変化したときにビープを鳴らす、フォーカス位置の座標をログに書き出す、ということはできました。

diff --git a/source/_UIAHandler.py b/source/_UIAHandler.py
index de33c7e..5c70e67 100644
--- a/source/_UIAHandler.py
+++ b/source/_UIAHandler.py
@@ -180,6 +180,12 @@ class UIAHandler(COMObject):
 		eventHandler.queueEvent(NVDAEventName,obj)
 
 	def IUIAutomationFocusChangedEventHandler_HandleFocusChangedEvent(self,sender):
+		import tones
+		tones.beep(880,20)
+		from logHandler import log
+		log.info('test focusChanged ' + str(sender))
+		rect = sender.CurrentBoundingRectangle
+		log.info('L:%d T:%d R:%d B:%d' % (rect.left, rect.top, rect.right, rect.bottom))
 		if not self.MTAThreadInitEvent.isSet:
 			# UIAHandler hasn't finished initialising yet, so just ignore this event.
 			return

参考にしているのは MSDN の「蛍光ペンのサンプル」の C# 実装です。

http://msdn.microsoft.com/ja-jp/library/aa358508%28v=vs.90%29.aspx

引き続き検討します。

Ticket History (3/19 Histories)

2013-05-01 19:27 Updated by: nishimoto
  • New Ticket "フォーカス位置のハイライト機能" created
2013-05-06 00:03 Updated by: nishimoto
Comment

Windows 8 でフォーカス位置のハイライトが動きました。

まだまだ Windows API のサンプルをコピーペーストで寄せ集めたような実装で、リリースできるレベルまでは多くの改良が必要ですが、とりあえず BitBucket の下記のレポジトリに push しています。

https://bitbucket.org/nishimotz/nvdajp/

ブランチ highlight

なお現状では UI Automation を使っているので Windows 7/8 でしか動かないと思います。

2013-05-15 07:32 Updated by: nishimoto
Comment

下記のコミットで、タスクバーに不必要なアイコンを表示しないように改良しました。

highlight d764e12

ハイライト表示の処理は安定してきたので、UIAHandler にパッチをあてないでグローバルプラグインだけで実装できないか、検討してみたいと思います。

2013-05-23 19:58 Updated by: nishimoto
Comment

下記のコミットで MSAA を使う方法に変更しました。

bitbucket ブランチ highlight c69dc21

完全に globalPlugins だけで動くようになったと思いますが、もう少しテストします。。

2013-05-23 22:05 Updated by: nishimoto
Comment

highlight global plugin 130523

インストール環境の NVDA 2013.1jp で設定ディレクトリの globalPlugins に添付した highlight.py を置いて、フォーカスハイライトの動作を確認しました。

ウィンドウがリサイズした場合や、レビューカーソルがフォーカスを外れたときなど、本当は消えてほしいハイライトが消えないことがあります。

しかし、Windows 8 のナレーターのハイライトもそれほど完璧には実装されていないようなので、とりあえず興味のある人に使っていただいて、フィードバックを得たいと思います。

ちゃんとリリースするときには不要なログ出力を削ってアドオンにしたいと思います。。

2013-05-24 10:40 Updated by: nishimoto
Comment

focusHighlight をアドオンにしました。

https://dl.dropboxusercontent.com/u/62564469/focusHighlight-0.0.1.nvda-addon

scons でビルドできるようにして、リポジトリを作りました。

https://bitbucket.org/nishimotz/focushighlight

2013-05-24 23:49 Updated by: nishimoto
Comment

本家の nvda-addon メーリングリストや nvda-japanese-users などで告知をして、下記の意見をいただいています。

  • Alt+Tab すると HighlightWin1 などが選択肢に出てきてしまう(ハイライトを4つのウィンドウで描画しているためなのですが、出ないようにしたつもりでした。。)
  • ハイライトの表示と非表示をショートカットか設定ダイアログで切り替えられるとよい
  • ハイライトの色を変えられるとよい
2013-05-25 22:37 Updated by: nishimoto
Comment

Windows 7 と xp で、デスクトップにウィンドウが何もない状態で NVDA+N を押して NVDA メニューを開いて、直後にエスケープを押し、NVDA メニューを閉じると、 "HighlightWin4" という(本来は通知されてほしくない)ウィンドウが読み上げられていることを確認しました。

もう少し調べてみます。

2013-05-26 16:15 Updated by: nishimoto
Comment

HighlightWin4 などの読み上げ(および不適切なフォーカス移動)を回避するように変更してみました。

Focus Highlight 0.0.2 https://dl.dropboxusercontent.com/u/62564469/focusHighlight-0.0.2.nvda-addon

2013-06-04 22:45 Updated by: nishimoto
Comment

フォーカスを赤で、ナビゲーターオブジェクトを緑で表示するようにしました。

Focus Highlight 0.0.3 https://dl.dropboxusercontent.com/u/62564469/focusHighlight-0.0.3.nvda-addon

うまく動かない場合もあるのですが、Windows 8 のスタート画面、Windows の電卓、 NVDA メニューの設定ダイアログなどはちゃんと動いています。

2013-06-05 09:47 Updated by: nishimoto
Comment

フォーカスを赤で、ナビゲーターオブジェクトとフォーカスが違う場所の時にはナビゲーターを緑で表示するようにしました。

Focus Highlight 0.0.4

https://dl.dropboxusercontent.com/u/62564469/focusHighlight-0.0.4.nvda-addon

2013-06-20 11:30 Updated by: nishimoto
Comment

アプリケーションによってエラーが起きることがあったので、回避する処理を追加しました。

Focus Highlight 0.0.5

https://dl.dropboxusercontent.com/u/62564469/focusHighlight-0.0.5.nvda-addon

アドオンの英語ページ(暫定): http://en.nishimotz.com/nvda_focus_highlight

2013-07-07 23:43 Updated by: nishimoto
Comment

nishimotz の focushighlight リポジトリが NVDA Addon Team から fork されました:

https://bitbucket.org/nvdaaddonteam/focushighlight

2013-08-03 14:48 Updated by: nishimoto
Comment

focusHighlight アドオンは readme.md を書けば本家のアドオン紹介サイトで公開してもらえる予定ですが、最後の作業が滞っています。

もう一つ、最近の開発版ソースと Skype 6.6 の組み合わせで、以下のエラーが出ています。

あまりやりたくないですが api.getNavigatorObject() が失敗したときに try 文で pass する必要があるかも知れません。

ERROR - unhandled exception (11:44:47):
Traceback (most recent call last):
  File "_ctypes/callbacks.c", line 314, in 'calling callback function'
  File "userConfig\addons\focusHighlight\globalPlugins\focusHighlight.py", line 307, in WndProc
    updateNavigatorLocation()
  File "userConfig\addons\focusHighlight\globalPlugins\focusHighlight.py", line 184, in updateNavigatorLocation
    nav = api.getNavigatorObject()
  File "api.py", line 197, in getNavigatorObject
    obj=globalVars.reviewPosition.NVDAObjectAtStart
  File "baseObject.py", line 21, in __get__
    return self.fget(instance)
  File "textInfos\offsets.py", line 293, in _get_NVDAObjectAtStart
    return self._getNVDAObjectFromOffset(self._startOffset)
  File "virtualBuffers\__init__.py", line 95, in _getNVDAObjectFromOffset
    return self.obj.getNVDAObjectFromIdentifier(docHandle,ID)
  File "virtualBuffers\MSHTML.py", line 210, in getNVDAObjectFromIdentifier
    HTMLNode=NVDAObjects.IAccessible.MSHTML.locateHTMLElementByID(self.rootNVDAObject.HTMLNode.document,'ms__id%d'%ID)
  File "comtypesMonkeyPatches.py", line 32, in new__getattr__
    return old__getattr__(self,name)
  File "C:\Python27\lib\site-packages\comtypes\client\lazybind.py", line 149, in __getattr__
    return self._comobj._invoke(descr.memid, descr.invkind, 0)
  File "C:\Python27\lib\site-packages\comtypes\automation.py", line 664, in _invoke
    dp, var, None, argerr)
COMError: (-2147417842, '\x83A\x83v\x83\x8a\x83P\x81[\x83V\x83\x87\x83\x93\x82\xcd\x81A\x95\xca\x82\xcc\x83X\x83\x8c\x83b\x83h\x82\xc9\x83}\x81[\x83V\x83\x83\x83\x8a\x83\x93\x83O\x82\xb3\x82\xea\x82\xbd\x83C\x83\x93\x83^\x81[\x83t\x83F\x83C\x83X\x82\xf0\x8c\xc4\x82\xd1\x8fo\x82\xb5\x82\xdc\x82\xb5\x82\xbd\x81B', (None, None, None, 0, None))

2013-08-04 16:37 Updated by: nishimoto
Comment

本家のアドオンチームが focus highlight の readme.md を書いて正式に公開してくれました。

まだ説明の日本語訳をコミットしてませんが、下記からダウンロードできます。

http://addons.nvda-project.org/addons/focusHighlight.ja.html

今後はこのアドオンの保守は本家のアドオンチームの活動として行います。

2013-08-30 15:08 Updated by: nishimoto
  • Ticket Close date is changed to 2013-08-30 15:08
  • Resolution Update from None to Fixed
  • Status Update from Open to Closed
Comment

本家チケット 971

http://community.nvda-project.org/ticket/971

Focus Highlight アドオンの実装が NVDA 本体に取り込まれる可能性が出てきました。

今後の検討は上記の本家チケットで行います。

2013-10-20 22:58 Updated by: nishimoto
  • Status Update from Closed to Open
Comment

コミュニティのアドオンサイトで Focus Highlight は「開発中のアドオン」に分類されているので、「安定版」になっていないという意味で再オープンしました。

http://addons.nvda-project.org/dev.ja.html

アドオン開発のガイドライン

https://bitbucket.org/nvdaaddonteam/todo/raw/master/guideLines.txt

現在 Focus Highlight は NVDA 2013.3 系で IE と併用するとエラーがでる不具合が報告されており、下記の暫定修正を検討中です。

https://bitbucket.org/nishimotz/focushighlight/commits/d30e9de2d58e7e9975122a88403fe7fb1d1287a8

2013-12-15 11:32 Updated by: nishimoto
  • Status Update from Open to Closed
  • Component Update from (None) to アドオン
  • Ticket Close date is changed to 2013-12-15 11:32
Comment

本家アドオンサイトで「安定版」扱いになったので、クローズします。

今後の課題の一つとして、下記のチケットがあります:

#32589 FocusHighlight が Windows 8.1 「すべての項目のサイズを変更する」でうまく動かない

Attachment File List

Edit

Please login to add comment to this ticket » Login