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

Screen reader JAWS for Windows Russian

За 2005-07-15

[JFWRus] Re[13]: Возможно ли написать такой скрипт?..

Вечер добрый, Анатолий.

>>> у меня тогда работала функция Pause в цикле, впрочем и Delay вела себя анологично.

i> Тогда это проблема не Pause, а цикла...

Я и не говорил, что эта проблема паузы... Проблема была паузы в
цикле.... А по отдельности они работали очень неплохо:-)

i> Вы переоцениваете (или недооцениваете) джоз:) Все-таки это не ядро операционной
i> системы, чтобы делить процессорное время между
i> процессами и потоками.

Анатолий, причём здесь это? Я не говорил об этом, я говорил о том, что
поток джоза, может вызвав функцию Sleep с параметром 0 заставить
систему отработать все ждущие в очереди потоки, отдав своё время на
это и не более.
То есть система выделила джозу время на работу, а он хочет подождать и в тоже
время не останавливая свой поток заставить систему проиграть ждущие в
очереди потоки за счёт своего времени. По-моему это и делается в
течении 100 миллисекунд в функции Pause.

i> Джоз, конечно, может приостановить порожденный им поток
i> (точнее этот поток может приостановить свою работу
i> до тех пор, пока породивший его поток не отсемафорит ему работать дальше),
но
i> приостановить, а потом позволить дальше работать,
i> например, потокам в браузере... это вряд ли.

Почему? Я могу из своего приложения без проблем
приостоновить и запустить любой поток - хоть в браузере, хоть в любом другом
приложении.
Смотрите API функции SuspendThread и ResumeThread...

i> Анализируя сообщения,
i> можно получить представление о состоянии приложения. Например, если очередь
его
i> сообщений пуста(или в ней нет сообщений от
i> дочерних контролов), то можно полагать, что приложение отработало событие
и теперь
i> стабильно.

Неет, в этом случае можно пологать, что приложение получило событие, а
вот что и самое главное сколько времени уйдёт на его обработку ну
никак нельзя предположить.

i> Это, конечно, не значит, что джоз поступает именно так, но это значит, что
возможность
i> контролировать происходящие события
i> имеется.

Конечно, джоз и контролирует... Не секрет, что лвиную долю информации
о происходящем получают из хуков, но не всё так просто.
И кстати, откуда Вы взяли, что джоз в паузе ждёт сообщения? В описании
функции сказано, что выполнение скрипта приостанавливается и джоз
отдаёт своё время приложениям, заметте не активному, а всем.
Дальше читаем описание delay. Здесь сказано, что джоз приостанавливает
работу на определённое время и эквивалентен Pause(1). Но имеет отличие
в том, что не отдаёт своё время другим приложениям. Ни одного слова о
сообщениях, только о времени. Оно и логично, работа приложений основана
не на одних сообщениях.
Да и трудно проанализировать что-то опираясь на сообщения, нужно
просто приостоновить работу, а в случае с паузой отдать и своё время, и подождать,
пока приложение сделает свои
дела.

>>> По описанию и смыслу работы Pause это будет как раз то, что надо...

i> По-моему, это ближе к Delay...

Так по описанию они и есть суть одно, за исключением того, что в паузе
ещё отдаётся приложением время самого скрипта.

i> Впрочем, джоз весьма загадочная штука (порой загадочнее, чем женщины:).

Точно, но нужно позновать второе и первое заодно;-)

--
С уважением, Sergey.

***
Это сообщение No1748
было разослано для 225 участников дискуссионного листа
[JFWRus] Re[13]: Возможно ли написать такой скрипт?..

   2005-07-15 19:14:22 (#402112)

[JFWRus] Re[12]: Возможно ли написать такой скрипт?..

Здравствуйте, Сергей.

>> у меня тогда работала функция Pause в цикле, впрочем и Delay вела себя анологично.

Тогда это проблема не Pause, а цикла...

>> Нет Джоз не ждёт отработки события, да и
откуда ему знать о них? Он просто отдаёт время всем другим приложениям, а точнее
готовым к выполнению потокам.

Вы переоцениваете (или недооцениваете) джоз:) Все-таки это не ядро операционной
системы, чтобы делить процессорное время между
процессами и потоками. Джоз, конечно, может приостановить порожденный им поток
(точнее этот поток может приостановить свою работу
до тех пор, пока породивший его поток не отсемафорит ему работать дальше), но
приостановить, а потом позволить дальше работать,
например, потокам в браузере... это вряд ли. Джоз подавляющую часть своей
работы делает через хуки, посредством которых можно
держать под контролем очередь
сообщений, например, конкретного приложения. Причем есть хук, позволяющий перехватить
сообщение на входе в приложение, и есть хук,
перехватывающий сообщение на выходе из приложения (когда оно передается системе
на обработку по умолчанию). Анализируя сообщения,
можно получить представление о состоянии приложения. Например, если очередь его
сообщений пуста(или в ней нет сообщений от
дочерних контролов), то можно полагать, что приложение отработало событие и теперь
стабильно.
Это, конечно, не значит, что джоз поступает именно так, но это значит, что возможность
контролировать происходящие события
имеется.

>> По описанию и смыслу работы Pause это будет как раз то, что надо...

По-моему, это ближе к Delay...

Впрочем, джоз весьма загадочная штука (порой загадочнее, чем женщины:).
С уважением, Анатолий

***
Это сообщение No1747
было разослано для 225 участников дискуссионного листа
[JFWRus] Re[12]: Возможно ли написать такой скрипт?..

   "i_chay" 2005-07-15 15:14:47 (#401982)

[JFWRus] О видеокартах

Здравствуйте уважаемые участники рассылки!
Я уже неоднократно писал в рассылку, что у меня Jaws 6.10.1006u при
установке конфликтует с драйвером видокарты radeon 9000.
При установке все идет нормально, а вот после перезагрузки перестают
говорить не только этот Jaws, но и установленные ранее.
На днях случайно удалось решить эту проблему.
Установил Jaws 6.10.1006u, как и ранее драйвер выбило. Я скопировал
папку
c:\program files\freedom sceintifik\jaws\6.10
на другой диск, востановил систему и вернул папку назад, а вот ещё забыл,
что из папкиDocuments and Settings файлы также сохранил.
Далее создал ярлык на запуск и все нормально заработало.
На сколько я понял, что при конфликтах с видеокартой достаточно ранее у
кого либо установленный Jaws скопировать и перенести на свой компьютер.
При этом все должно работать.
Так ли это или у меня так получилось случайно?
Замечу, что в риестре я ничего не прописывал, а систему востанавливал из
образа, созданного ghost 8.0.
С уважением,
Владислав Демьянов
vgd@m*****.kz

***
Это сообщение No1746
было разослано для 225 участников дискуссионного листа
[JFWRus] О видеокартах

   2005-07-15 13:23:21 (#401917)

[JFWRus] Re[11]: Возможно ли написать такой скрипт?..

Доброе утро, Анатолий.

i> использование Pause() ошибочно. В этом случае (независимо от версии джоза)
она
i> будет работать как Delay(1)

Всё правильно, я привёл этот пример лишь для того, что бы показать как
у меня тогда работала функция Pause в цикле, впрочем и Delay вела себя
анологично.

i> Функция Beep()
i> - это аналог такой системной функции, которая к
i> конкретному окну (и даже к Десктопу) не имеет отношения. Если вы сталкивались
i> с API функцией MessageBeep(), то знаете, что в ее
i> параметрах нет дескриптора окна.

Это здесь не причём, если Вы запустите этот скрипт, то услышите бипы
разделённые некоей паузой, зависящей от количества Pause. Тогда же у меня, даже
данный пример вёл
себя так, как бут-то в цикле, вообще нет пауз. А именно, если бы в цикле
убрать паузы и поместить их в нужном количестве после EndWhile. Тут уж
ничего просто не успевало произойти в приложении, пока выполнялся
цикл.
Я тогда долго мучался с реальным скриптом,
думая, что где-то ошибка,
пока не попробовал этот примерчик - здесь уж сделать ошибку трудно:-) Потом в
реальном примере, раскрыв
цикл, благо в нём было всего 10 итерраций всё заработало так, как и
задумывалось, а вот в цикле ни в какую.

i> Смысл же функции Pause() в джозе -- ожидать
i> окончания отработки окном приложения некоего события,
i> например, разворачивание меню, появление диалога. В этом случае джоз будет
ждать
i> столько времени, сколько нужно приложению.

Нет, тут Вы немножко ошибаетесь. Джоз не ждёт отработки события, да и
откуда ему знать о них? Он просто отдаёт время всем другим
приложениям, а точнее готовым к выполнению потокам.
И что они там сделают в это время - толи обработают события, толи
что-то посчитают, что-то проиграют известно только им....

i> Как это реализовано -- вопрос, конечно, интересный, но пусть он останется
в недрах
i> Фридома.

Это можно реализовать, например так:
DWORD StartTime = GetTickCount();
while ((GetTickCount() - StartTime) > 100)
Sleep(0);

По описанию и смыслу работы Pause это будет как раз то, что надо...

i> Скажу только, что в тех ситуациях, где я
i> использовал Pause(), она меня не подводила (как правило, это отсылка комбинаций
i> клавиш и ожидание реакции приложения).

Вот-вот, а мне тогда не повезло. Смысл был в том, что по графику
фильтра (CoolEdit) щёлкалось мышкой, появлялось окошечко с вводом
координат, которые вводились и нажимался
ввод и так для 10 точек.
В цикле не работало, а без всё работало отлично с
теми же паузами, когда я просто один и тот же кусок скопировал 10 раз
друг за другом.

i> Предупреждение по поводу while, которое есть в подсказках по функции Pause()
i> в Диспетчере скриптов, актуально, по-моему, для
i> циклов не имеющих однозначного условия для прекращения своей работы.

Позвольте не согласиться. Причём тут Pause? Ваши слова актуальны и для циклов
без пауз и
для любой другой функции. И тогда такое
предупреждение логично поместить в описание While, а не паузы..., а
здесь делается упор именно на паузу...

--
С уважением, Sergey.

***
Это сообщение No1745
было разослано для 225 участников дискуссионного листа
[JFWRus] Re[11]: Возможно ли написать такой скрипт?..

   2005-07-15 12:07:54 (#401867)

[JFWRus] Re[10]: Возможно ли написать такой скрипт?..

Здравствуйте, Сергей.

В вашем примере
while (i<20)
Beep()
Pause()
Pause()
let i=i+1
EndWhile

использование Pause() ошибочно. В этом случае (независимо от версии джоза) она
будет работать как Delay(1), поскольку в
приложении, для которого выполняется скрипт ничего не происходит. Функция Beep()
- это аналог такой системной функции, которая к
конкретному окну (и даже к Десктопу) не имеет отношения. Если вы сталкивались
с API функцией MessageBeep(), то знаете, что в ее
параметрах нет дескриптора окна. Смысл же функции Pause() в джозе -- ожидать
окончания отработки окном приложения некоего события,
например, разворачивание меню, появление диалога. В этом случае джоз будет ждать
столько времени, сколько нужно приложению. Как
это реализовано -- вопрос, конечно, интересный, но пусть он останется в недрах
Фридома. Скажу только, что в тех ситуациях, где я
использовал Pause(), она меня не подводила (как правило, это отсылка комбинаций
клавиш и ожидание реакции приложения).
Предупреждение по поводу while, которое есть в подсказках по функции Pause()
в Диспетчере скриптов, актуально, по-моему, для
циклов не имеющих однозначного условия для прекращения своей работы.

С уважением, Анатолий

***
Это сообщение No1744
было разослано для 225 участников дискуссионного листа
[JFWRus] Re[10]: Возможно ли написать такой скрипт?..

   "i_chay" 2005-07-15 06:44:41 (#401718)