Отправляет email-рассылки с помощью сервиса Sendsay

Screen reader JAWS for Windows Russian

[JFWRus] Total Commander

Здравствуйте!
недавно поднимался вопрос чтения информации об размере объектов в
плавающем режиме. наряду с предложенным вариантом (с символа) существует
второй, использующий функцию StringSegment. Такой подход позволяет
читать информацию, представленную и в килобайтах, а так же выработать
общий подход и к чтению найденных файлов (имена могут содержать пробелы
так и /) в окне поиска.
ВВодиться общая функция такого содержания:
Int Function GetIndexstring (string s, string chr)
var
int ix,
int p

let ix = 1
let p = 1
while p < StringLength (s)
if SubString (s, p, 1) == Chr then
let ix = ix + 1
endif
let p =p + 1
endwhile
Return ix
EndFunction
Она сообщает число вхождений разделителей в указанную строку. И тогда
для чтения размера используем:
SayString ("Размер:" + StringSegment (LinePanel," ", n - 2) + StringSegment (LinePanel,
" ", n - 1))
Для даты:
SayString ("Дата:" + StringSegment (LinePanel, " ", GetIndexString (LinePanel,
" ")))
Для свободного места на диске:
SayString ("Свободно:" + StringSegment (LinePanel, " ", n -5) + StringSegment
(LinePanel, " ", n - 4) )
Где let n = GetIndexString (LinePanel, " ")
В случае вывода времени создания и атрибутов достаточно скорректировать
значение "n - *".
Для упрощения настройки скринридера (работа с выделенным курсором) при
установке оверпаков можно включить функцию AutoStarrEvent () примерно
такого содержания:
var
string WcmdIni

StopSpeech ()
SendMessage (GetAppMainWindow (GetCurrentWindow ()), 274, 61488, 0)
let WcmdIni="C:\\Program Files\\Total Commander\\Wincmd.ini"
if IniReadInteger ("Colors", "InverseCursor", 0, WcmdIni) then
Return
Else
IniWriteInteger ("Colors", "CursorColor", CurColor,WcmdIni);цвет курсора
IniWriteInteger ("Colors", "InverseCursor", 1, WcmdIni);инверсный курсор
и т.д.
параметр WcmdIni указывает путь к файлу, а он различен для версий 6.54 и
ниже! Контроль инверсного выделения позволяет работать с любой палитрой,
а значение CurColor определить эксперементально или задать
CurColor = 8388608, в разделе глобальных констант.
На мой взгляд использование выделенного курсора несколько уменьшает
возможности работы с выделенными объектами, но меньше тормозит машину.В
свои скрипты я добавил:
- сообщение пути и имени архива/файла в окне поиска;
- выбор компакт привода по нажатию комбинации клавиш;
- возврат на предыдущий диск;
- *.jsm дополнен полным перечнем клавишных комбинаций менеджера;
- несколько оптимизировано программирование для ускорения вычислений;
Я не претендую на оригинальность и могу предоставить полный текст *.jss
для доработок и дополнений.
С наилучшими пожеланиями, Leonid Jilin kozerog***@m*****.ru

***
Это сообщение No3825
было разослано для 306 участников дискуссионного листа
[JFWRus] Total Commander

Ответить   Leonid Jilin Tue, 09 May 2006 14:36:17 +0800 (#546630)

 

Ответы:

Приветствую, Leonid!

Вы писали:

Леонид, я, конечно, не столь опытен в написании скриптов, но хотелось
бы дать вот какой совет: не используйте функцию SayString. Сами
разработчики говорят, что эта фукция перешла из предыдущих версий и
предназначена преимущественно для тестовых целей, когда вам нужно
вывести промежуточный результат. Вместо неё гораздо удобнее, имхо,
использовать SayMessage.

Ответить   Tue, 9 May 2006 12:04:01 +0400 (#546632)

 

Здравствуйте,

[...текст функции поскипан...]

Интересное решение, но для большей универсализации я бы предложил Вам
немного подправить данную функцию. Дело в том, что в челюстях старше седьмой
версии появилась такая функция (цитата из FSDN):
Function: StringSegmentCount

Description

Retrieves a count of segments in a string.

Returns

Type: Int
Description: The count of segments in the string

Parameters

Param 1:

Type: String
Description: The string that is delimited by some character or characters.
Include: Required

Param 2:

Type: String
Description: The delimiter or set of delimiters. This string must be
enclosed in quotation marks.
Include: Required
Как Вы понимаете возвращаемые значения Вашей функцией и вышеописанной
штатной различаются ровно на единичку. Реализовав эту функцию для более
ранних версий, Вы получите более универсальный вариант. В случае такого
изменения Вашей функции потребуются небольшие переделки скриптов, но с
другой стороны появится возможность мгновенной переделки и ускорения работы
скрипта при переходе к челюстям седьмой версии путём простого удаления
текста Вашей функции из текста скрипта и перехода к более быстрой встроенной
функции.

В дополнении к этому вместо функции SayString, которая является уже только
лишь отладочной, я предлагаю использовать либо Say, либо SayMessage.

[...код поскипан...]

Для универсализации вместо строки

я бы написал примерно так:
let WcmdIni=GetRegistryEntryString(1, "Software\\Ghisler\\Total Commander",
"InstallDir")
let Temp = GetRegistryEntryString(1, "Software\\Ghisler\\Total Commander",
"IniFileName")
If Temp == "" then
let WcmdIni = WcmdIni + "Wincmd.ini"
else
let WcmdIni + Temp
EndIf
Какие-либо изменения потребуются лишь только при спуске ниже до Windows
Commander, поскольку там другие ключи в реестре. Хотя потенциально можно
обыграть и эту ситуацию использовав при анализе ключей знания имени
приложения.

Выкладывайте их куда-нибудь. Доработаем. Я думаю в рассылке найдётся немало
желающих.

До свидания.

***
Это сообщение No3895
было разослано для 306 участников дискуссионного листа
[JFWRus] Re: Total Commander

Ответить   Fri, 12 May 2006 12:21:00 -0700 (#548313)

 

Здравствуйте, Serge Tumanyan!
Ответ на письмо "Total Commander" от 13May2006
Я признателен автору первых скриптов и Вам, другим за советы по
доработке скриптов. Часть их уже внесена. Вчастности на моей машине
определить через реестр путь к wincmd. ini оказалось делом нелёгким, но
всему своё время.
Скрипты выложены по адресу:
http://www.kirilllaz.narod.ru/Files/total6_54.rar
С наилучшими пожеланиями, Leonid Jilin
E-mailto:kozerog***@m*****.ru

***
Это сообщение No3925
было разослано для 305 участников дискуссионного листа
[JFWRus] Re[2]: Total Commander

Ответить   Leonid Jilin Sun, 14 May 2006 22:06:45 +0800 (#548860)