Модуль NV Access для TC 8x64

Обсуждение Total Commander. Установка, использование, настройка, решение проблем, скрытые функции. Обсуждение новых версий.

Модераторы: d-view, Моторокер, Avada, CaptainFlint, Nik

Ответить
The_Immortal
Сообщения: 5
Зарегистрирован: Вт ноя 05, 2013 03:01

Модуль NV Access для TC 8x64

Сообщение The_Immortal »

Всех приветствую!

Ситуация следующая. Есть свободный проект NVDA (nvaccess.org), который упрощает жизнь слепым людям по работе с компьютером с помощью озвучивания всех действий, происходящих в ОС. В частности, программный пакет имеет модули, которые работают с определенным ПО. Подобный модуль (ссылку на модуль, увы, дать не могу, т.к. форум этого сделать не дает) есть и для TC (Питон):

Код: Выделить всё

#appModules/totalcmd.py
#A part of NonVisual Desktop Access (NVDA)
#Copyright (C) 2006-2012 NVDA Contributors
#This file is covered by the GNU General Public License.
#See the file COPYING for more details.

import appModuleHandler
from NVDAObjects.IAccessible import IAccessible
import speech
import controlTypes
import ui

oldActivePannel=0

class AppModule(appModuleHandler.AppModule):

	def chooseNVDAObjectOverlayClasses(self, obj, clsList):
		if obj.windowClassName in ("TMyListBox", "TMyListBox.UnicodeClass"):
			clsList.insert(0, TCList)

class TCList(IAccessible):

	def event_gainFocus(self):
		global oldActivePannel
		if oldActivePannel !=self.windowControlID:
			oldActivePannel=self.windowControlID
			obj=self
			while obj and obj.parent and obj.parent.windowClassName!="TTOTAL_CMD":
				obj=obj.parent
			counter=0
			while obj and obj.previous and obj.windowClassName!="TPanel":
				obj=obj.previous
				if obj.windowClassName!="TDrivePanel":
					counter+=1
			if counter==2:
				ui.message(_("left"))
			else:
				ui.message(_("right"))
		super(TCList,self).event_gainFocus()

	def reportFocus(self):
		if self.name:
			speakList=[]
			if controlTypes.STATE_SELECTED in self.states:
				speakList.append(controlTypes.stateLabels[controlTypes.STATE_SELECTED])
			speakList.append(self.name.split("\\")[-1])
			speech.speakMessage(" ".join(speakList))
		else:
			super(TCList,self).reportFocus()
Но к большому сожалению данный модуль не работает в TC 8x64, т.к. таких имен классов окон, как "TDrivePanel", "TPanel" и т.п. - нет. Они все идентифицируются как "Window". Соответственно с однозначной идентификацией возникают понятные проблемы.

Подскажите, пожалуйста, что можно придумать, дабы оживить вышеуказанный модуль?


Спасибо!
The_Immortal
Аватара пользователя
MVV
Сообщения: 4815
Зарегистрирован: Чт окт 15, 2009 10:58
Откуда: Ростов-Дон

Сообщение MVV »

Переименовывать классы Гислер вряд ли будет, ему не раз говорили об этом, и он вроде отвечал, что какие-то проблемы могут быть из-за этого в самом Лазарусе, который зачем-то хочет, чтобы всё имело класс Window.

Остаётся только городить огороды - определять классы окон по другим признакам (по размерам и координатам внутри окна тотала, по иерархии и т.п.)...
Ответить