Total Commander Forum Index Total Commander
Форум поддержки пользователей Total Commander
Сайты: Все о Total Commander | Totalcmd.net | Ghisler.com | RU.TCKB
 
 RulesRules   SearchSearch   FAQFAQ   MemberlistMemberlist   UsergroupsUsergroups   RegisterRegister 
 ProfileProfile   Log in to check your private messagesLog in to check your private messages   Log inLog in 

Single Post  Topic: Модуль NV Access для TC 8x64 
Author Message
The_Immortal



PostPosted: Wed Apr 27, 2016 17:58    Post subject: Модуль NV Access для TC 8x64 Reply with quote

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

Ситуация следующая. Есть свободный проект NVDA (nvaccess.org), который упрощает жизнь слепым людям по работе с компьютером с помощью озвучивания всех действий, происходящих в ОС. В частности, программный пакет имеет модули, которые работают с определенным ПО. Подобный модуль (ссылку на модуль, увы, дать не могу, т.к. форум этого сделать не дает) есть и для TC (Питон):
Code:
#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
View user's profile Send private message


Powered by phpBB © 2001, 2005 phpBB Group