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

Screen reader JAWS for Windows Russian

[JFWRus] autoStartEvent

Здравствуйте уважаемые участники рассылки.
как добиться, чтобы функция AutoStartEvent срабатывала всего один раз при
запуске приложения, а потом не работала при возвратах к этому приложению
командой алт+таб?
ситуация такая. приложение запускается по горячим клавишам с ярлыка на
рабочем столе. сначала открывается родительское окно, где надо кликнуть
мышью на невидимом графике, чтобы войти в искомое дочернее окно. в
default.jss я плоложил скрипт под названием "zapusk", где функция "MomeTo"
перемещает фокус на график, а потом иммитируется клик мышью.
далее, в начало диспетчера скриптов приложения я поместил следующий
фрагмент:
цитата
globals
int DefaultFirstTime

void Function AutoStartEvent ()
if (DefaultFirstTime == 0) then
let DefaultFirstTime = 1
EndIf
PerformScript Zapusk ()
EndFunction
конец цитаты
теперь при запуске приложения сразу открывается искомое дочернее окно. но
при возвратах к приложению командой алт+таб опять срабатывает функция
AutoStartEvent. то есть, дочернее окно активируется, но фокус попадает как
раз в ту точку, за которую отвечает функция MomeTo из скрипта "zapusk".
подскажите, что надо исправить в диспетчере скриптов данного приложения.

С уважением, Ирбис.

***
Это сообщение No5447
было разослано для 333 участников дискуссионного листа
[JFWRus] autoStartEvent

Ответить   "irbis" Mon, 19 Feb 2007 12:30:59 +0300 (#641007)

 

Ответы:

Привет!

Задан вопрос:

Ответить   Tue, 20 Feb 2007 14:22:13 +0200 (#641381)

 

Здравствуйте, Сергей.
хотелось бы пошагово выполнить ваши рекомендации.
вы писали:

в файле скриптов приложения я поместил следующую глобальную переменную:
globals
int DefaultFirstTime
затем в "void Function AutoStartEvent ()" в первой строке установил для этой
переменной значение =0
if (DefaultFirstTime == 0) then

далее вы пишете:

вроде бы я сделал именно так во второй строке, записав:
let DefaultFirstTime = 1
затем мне нужно было записать действие, выполняемое функцией AutoStartEvent:
PerformScript Zapusk ()
и завершить строкой "EndIf" и строкой "EndFunction".
однако в таком случае указанное действие вообще не выполняется. то есть, по
горячим клавишам с ярлыка рабочего стола запускается лишь исходное,
родительское окно приложения. в то время как PerformScript Zapusk () должно
открывать следующее, дочернее окно.
пробы показали, что PerformScript Zapusk () выполняется теми же горячими
клавишами, когда соответствующая строка идет не после, а перед строкой
"EndIf".

далее вы пишете:

к сожалению, функция AutoStartEvent у меня срабатывает снова при переходе от
данного приложения к другому приложению и обратно по команде алт+таб. это
выражается в том, что в окне данного приложения фокус оказывается не на том
месте, где он был до нажатия алт+таб. фокус оказывается на точке, координаты
которой определены скриптом "zapusk". получается, что действие этого скрипта
не удается сделать однократным с помощью функции AutoStartEvent.
возможно поставленная задача требует чего-то большего, чем установления
глобальной переменной для привлечения AutoStartEvent. возможно это не
работает для приложений, где запуск осложнен открытием двух окон. возможно
мною допущена какая-то ошибка.

С уважением, Ирбис.

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

Ответить   "irbis" Tue, 20 Feb 2007 22:13:06 +0300 (#641484)

 

Доброго времени суток, irbis.

Попробуйте так:

globals
int DefaultFirstTime

void Function AutoStartEvent ()
if (DefaultFirstTime == 1) then
PerformScript Zapusk ()
let DefaultFirstTime = 0
EndIf

EndFunction

Но помните, что если Вы закроете приложение, а затем опять запустите
его, то функция AutoStartEvent не сработает до перезагрузки JAWS.

Ответить   Иван Штефуряк Wed, 21 Feb 2007 00:28:18 +0200 (#641544)

 

Здравствуйте, Иван.
попробовал ваш вариант функции AutoStartEvent. результаты такие.
по горячим клавишам с ярлыка рабочего стола открывается исходное,
родительское окно приложения, а следующее, дочернее окно не открывается.

вы писали:

попав в исходное окно приложения, я сразу закрыл его командой алт+ф4. затем
сразу нажал горячие клавиши, и приложение вновь открылось. то есть, ваша
функция AutoStartEvent еще раз сработала без перезагрузки джавс.
затем я произвел изменение в вашей функции, переместив строку PerformScript
Zapusk (), так что она оказалась после строки EndIf.
теперь при запуске приложения сразу открывается искомое дочернее окно. при
возвратах к приложению командой алт+таб дочернее окно тоже активируется. но
фокус опять попадает в ту точку, за которую отвечает скрипт "zapusk".
действие этого скрипта
опять не является однократным.
в письме Сергею Картавцеву мною была допущена неточность в нижеследующей
фразе:
"пробы показали, что PerformScript Zapusk () выполняется теми же горячими
клавишами, когда соответствующая строка идет не после, а перед строкой
"EndIf". конечно, пробы состояли в перемещении строки PerformScript Zapusk
() вслед за строкой EndIf. то есть, я пробовал сделать так и для своей, и
для вашей функции AutoStartEvent. но результата не достиг.
в принципе я могу открывать второе окно по еще одним горячим клавишам, и
тогда никаких проблем с некорректным перемещением фокуса не будет. тем не
менее, решение вопроса при помощи обсуждаемой функции является более
элегантным.
на всякий случай приведу скрипт "zapusk" на тот случай, если проблема
заключается в нем.

Script Zapusk ()

SaveCursor ()

JAWSCursor ()

MoveTo (705, 243)

Pause ()

LeftMouseButton ()

RestoreCursor ()

EndScript

С уважением, Ирбис.

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

Ответить   "irbis" Wed, 21 Feb 2007 11:30:48 +0300 (#641642)

 

Доброго времени суток, irbis.

Попробуйте ещё перед вызовом скрипта "zapusk" поставить паузу либо
командой "pause ()", либо командой "delay (x)", где x - это цифра,
означающая десятые доли секунды. То есть, если написать delay (5), то
пауза будет длительностью в полсекунды.

Ответить   Иван Штефуряк Wed, 21 Feb 2007 13:54:21 +0200 (#641743)

 

Здравствуйте, Иван.
вы писали:

поставил паузу. функция стала выглядеть так:

void Function AutoStartEvent ()

if (DefaultFirstTime == 1) then

Delay(5)

PerformScript Zapusk ()

let DefaultFirstTime = 0

EndIf

EndFunction

затем Delay(5) поочередно менял на

Delay(10) и на pause ().

к сожалению, ничего не изменилось. по-прежнему открывается только исходное,
родительское окно приложения, а следующее, дочернее окно не открывается.
все-таки здесь проявляется какая-то специфика приложения, запуск которого
осложнен открытием двух окон, что вынуждает отказаться от привлечения
функции AutoStartEvent.
в предыдущем письме я говорил о том, что могу открывать второе окно по
другим горячим клавишам, и
при этом никаких проблем с некорректным перемещением фокуса впоследствии
нет. правда, такой выход довольно неудобен и главное неэкономичен. и вот
только сегодня удалось достичь оптимального решения.
как известно, для запуска приложений с рабочего стола по умолчанию
используются клавиши control+alt в сочетании с определенной буквой. я выбрал
такое сочетание клавиш, которое не используется в диспетчере клавиатуры
джавс, и назначил его на ярлык данного приложения. то есть, это было сделано
средствами Windows xp. потом точно такое же сочетание прописал в диспетчере
клавиатуры джавс для данного приложения, и назначил на него вызов скрипта
"zapusk". в результате приложение можно запускать, удерживая и не отпуская
control+alt при двойном нажатии определенной буквы. единственное условие:
между нажатиями буквы надо сделать нужную паузу.
конечно, способ не самый элегантный, зато четко работающий.

С уважением, Ирбис.

***
Это сообщение No5468
было разослано для 334 участников дискуссионного листа
[JFWRus] Re[4]: autoStartEvent

Ответить   "irbis" Wed, 21 Feb 2007 21:55:15 +0300 (#641849)