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

[TC] функция jaws MoveTo

Приветствую.
Потребовалось написать маленький скрипт, где бы курсор перемещался в заданную
точку, сирич с помощью
функции MoveTo. Столкнулся с тем, что сия функция требует какой-то третий параметр,
отличный от
координат X и Y. Кто знает, что это за параметр может быть?
2. Какбы ещё написать скрипт, где бы курсор перемещался, тоесть активизировал
фокус, не по заданным
координатам, а по классу окна? Благодарю.

Ответить   Badjos Mon, 18 Feb 2008 19:47:28 +0300 (#726067)

 

Ответы:

Приветствую.

Функция MoveTo имеет только два параметра - координаты точки. Только что
заглянул в синопсис, третий параметр там даже не упомянается.

Можно воспользоваться функцией MoveToControl(Par1? Par2). Где Par1 -
дескриптор родительского окна, Par2 - ControlID желаемого элемента
управления.
Евгений Корнев.
E-mail: q148@l*****.ru.
Home Page: http://www.q148.land.ru
icq: 479973702

Ответить   Tue, 19 Feb 2008 00:21:57 +0700 (#726075)

 

Приветствую, Евгений.

Да я тоже ранее только двумя параметрами обходился, а вот смотрю в джоз 8.0.2173,
который просит
именно третий параметр. Вот его description:
Indicates wether or not the MoveTo function should treat the X and Y coordinates
as pixel coordinates
or column and row coordinates. If TRUE the X and Y coordinates will be treated
as column and row coordinates.
The default behavior is for the X and Y coordinates to be treated as pixel
coordinates.

А вот его return:
TRUE if move was successful, FALSE if one or both coordinates are off the edge
of
the screen.

Я на английском совсем не очень, а восьмой промт мне ситуацию никак не прояснил
:-).

Ну, ControlId вроде как величина постоянная, это я определю. А что принимать
за дескриптор
родительского окна? что это за значение? откуда его отскребать?

--
http://nigma.ru/c&badjos
Со всем почтением: Badjos.
badj***@r*****.ru badj***@j*****.ru ICQ: 310928013

Ответить   Badjos Mon, 18 Feb 2008 22:15:00 +0300 (#726099)

 

приветствую.
чтобы не загромождать сообщение опускаю английский текст. привожу только
русский перевод.
параметр отвечает за то, будет ли функция воспринимать переменные Xи Y как
координаты в пикселях, или как номера строки и столбца в таблице. при
значении True, X- воспринемается как номер строки, Y - как номер столбца в
таблице. по умолчанию параметры X и Y воспринимаются функцией как значения
координат точки в пикселях. в вашем случае поставьте этот параметр в
значение False или 0.

дескриптор - это переменный идентификатор окна. он присваевается окну только
при его открытии, или когда оно получает фокус. то есть, если вы ушли из
окна, а потом снова в него вернулись, то дескриптор уже сменится.
дескриптор - это целое число, а в JAWS его можно получать несколькими
функциями. в вашем случае наиболее вероятны функции GetParent и
GetCurrentWindow. поскольку наша тема становиться сильно специфична, то
лучше перенести её в личную переписку или продолжить её в рассылке
специально посвещённой скриптописанию. правда я на неё не подписан, но там
есть много более компетентных людей.
Евгений Корнев.

Ответить   Tue, 19 Feb 2008 11:00:17 +0700 (#726142)

 

Здравствуйте, Евгений.

Вы писали 19 февраля 2008 г., 9:00:17:

зря евгений.
мне вот тоже интересно так как иногда приходиться писать скрипты для
себя.
а писать ламерским способом надоело.

Ответить   Tue, 19 Feb 2008 10:10:59 +0500 (#726153)

 

Приветствую лис.

Хорошо всем нам известные подписчики Yuniks и ольга (carrying rain) сделали
отличный сайт www.lists.narod.ru на котором собраны все дискуссионные листы.
Там вы можете найти подписные реквизиты рассылки посвящённой написанию
скриптов. А уж там можете пользоваться и коллективным разумом, и установить
личные контакты с опытными скриптописателями. А данная рассылка
предназначена всё-таки для более глобальных компьютерных тем.
Евгений Корнев.

Ответить   Tue, 19 Feb 2008 14:30:16 +0700 (#726169)

 

Приветствую, Евгений.

Были, наверно, собраны, так как сайт не работает.

Более глобальные - это какие? обсуждать язык скриптов jaws сдесь ограничено?
Я нашёл лист на
субскрябе, который был сделан Туманяном в октябре 2006 года. Там всего 13 человек
подписано, и,
наверно, один Сергей Туманян и обладает теми самыми знаниями по написанию скриптов
jaws :-). Да и
лист тот больше ориентирован на скрипты к программе консультант плюс. Неужели
никто не знает язык
скриптов jaws на том уровне, что нужен начинающим? Я уже всеми этими скриптами
мучаюсь не один год,
но когда берусь за серьёзное изучение, то невольно всё равно появляются вопросы,
с которыми мой мозг
справиться самостоятельно не может. Обращаюсь то к одному то к другому за разъяснениями,
но получаю
лишь общие ответы, которые спокойно могу прочесть в существующих учебниках и
справках.
Вот вы, Евгений, дали мне ответ на поставленный мною вопрос, из которого я
совершенно ничего не
понял, вернее из второй части вопроса, касаемо ручек окна и т.д. Я уже тысячу
раз читал об этих
ручках, но так и не понял, по какому же принципу jaws определяет тот самый ID,
если он каждый раз
меняется, стоит только сменить фокус приложения. Нет не примера, ни внятных разъяснений,
одни общие
термины. Я уже далеко не чайник конечно, чуточку программирую на visual basic,
взялся за C++, но в так
необходимый в постоянной работе инструмент, как язык скриптов jaws, всё не могу
въехать. Согласен,
что это мои личные проблемы, что никто не виноват, что я такой тормоз, но просто
столько грамотеев,
у которых совершенно не ясно чему можно научиться. такое ощущение, будто знатоки
пытаются показать
свою крутость, но не свои знания.
Благо я вот только нашёл человека, который возьмётся за моё доскональное обучение,
но ведь многих
интересуют возможности, открывающиеся при применении скриптового языка jaws,
а не только то, что там
нового появилось в седьмой, восьмой, девятой версиях челюстей.

--
http://nigma.ru/c&badjos
Со всем почтением: Badjos.
badj***@r*****.ru badj***@j*****.ru ICQ: 310928013

Ответить   Badjos Tue, 19 Feb 2008 15:20:05 +0300 (#726218)

 

Здравствуйте, уважаемые участники рассылки и Badjos

вы писали 19 февраля 2008 г., 15:20:05:

ВСЁ ОТЛИЧНО РАБОТАЕТ, просто в названии сайта была неточность.
http://www.blindlists.narod.ru

с уважением,
Хусейн.
atabh***@h*****.ru

Ответить   Tue, 19 Feb 2008 15:40:29 +0300 (#726224)

 

Приветствую Badjos.
Всё же советую подписаться на ту рассылку где 13 подписчиков. Про неё многие
не знают, так что если подписчиков станет больше, то может и тематика станет
разнообразнее. Что касается подробного объяснения принципа скриптов, то как
раз там нужно такие вопросы поднимать. Рас уж возник интерес к дескрипторам
(или в вашей интерпритации ручкам), то с точки зрения программирования
идеалогия в краце такова: дескриптор - это текущий идентификатор окна. Для
того чтобы У окна был свой уникальный признак по которому скрипт мог его
опознать и используются дескрипторы. Получить дескриптор статическим образом
нельзя, нужно использовать специальные функции. Допустим мы хотим перейти к
элементу управления с ControlID 1024. Для этого используем функцию
MoveToControl(handle, 1024). Здесь параметр Handle - дескриптор
родительского окна элемента управления. Нам нужно заполучить этот
дескриптор. Функция возвращающая дескриптор родительского окна это
GetParent(par1)? Где par1 - это дескриптор окна в котором находится курсор.
Дескриптор текущего окна возвращает функция GetCurrentWindow(). Таким
образом окончательно вместо Handle пишем GetParent(GetCurrentWindows()). И
подставляем это в нашу функцию MoveTo. Также имеется функция GetFocus
которая возвращает дескриптор окна на котором находится фокус. Более
подробно о функциях начинающихся с префикса get лучше посмотреть в их
описании по Shift+F1.
Евгений Корнев.

Ответить   Tue, 19 Feb 2008 22:09:50 +0700 (#726253)

 

приветствую, Евгений.

отвечаю на письмо от 19 февраля 2008 г., 17:09:50:

к

я так понимаю, что ControlID можно просмотреть при включенном homeRow.
и что делать, если controlID изменяется вместе с хэндлом окна?

значит можно написать:
MoveToControl(handle, GetControlID (handle).
или что-то другое?

Ответить   Анатолий. Tue, 19 Feb 2008 18:04:56 +0200 (#726267)

 

Приветствую Анатолий.

Можно и так, а можно просто нажать на нужном элементе
управленияControl+Insert+F1 и в виртуальном просмотрщике отобразится класс,
ControlID и текущий дискриптор.

Вот тут как раз можно попробовать использовать упомянутую вами функцию
GetControlID. Но эта функция насколько помню позволяет получить ControlID
только непосредственно на элементе управления. Так что для перехода к нему
посредством функции MoveToControl она врядли подайдёт. Нужен статический
ControlID. Мне проблему переменных ControlID решитьне удалось, так что если
опытные скриптописатели ей занимались, то может они что-нибудь скажут.
Евгений Корнев.

Ответить   Tue, 19 Feb 2008 23:34:27 +0700 (#726274)

 

Привет Евгений!
цитата
Мне проблему переменных ControlID решитьне удалось, так что если

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

Ответить   Tue, 19 Feb 2008 19:55:32 +0300 (#726276)

 

приветствую, Виктор.

отвечаю на письмо от 19 февраля 2008 г., 18:55:32:

если не затруднит, то здесь поподробнее. как и что, и желательно
кусочек кода.

Ответить   Анатолий. Tue, 19 Feb 2008 19:46:17 +0200 (#726289)

 

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

Spy Sweeper

если неошибаюсь их можно найти на моём сайте,

ан нет ошибаюсь, я это почемуто несделал.

а вспомнил, там были небольшие неточности, пока программа неперешла к
проверке файловой системы, в видении скриптами инфы наблюдался сдвиг ,
который я неуспел выправить.

вобщем если интересна эта прога, то скрипты допишу и выложу.

Виктор Горелов

Ответить   Tue, 19 Feb 2008 21:23:47 +0300 (#726311)

 

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

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

Во-первых, id и дескриптор -- это разные сущности. Во-вторых, по-моему, все
уже было один раз и очень понятно разъяснено в пособии по написанию скриптов
(см. jaws.tiflocomp.ru) ровно на том уровне, какой нужен для скриптописания,
а именно:
1. дескриптор (handle) окна остается неизменным пока приложение не
прекратило свою работу и "меняется", когда вы запускаете приложение вновь
(следовательно, при перемещении фокуса дескриптор остается неизменным, также
неизменным он остается, если одно окно перекрывает другое, если окно
сворачивается или разворачивается, и даже если оно становится невидимым);
2. id элемента управления (control id) остается неизменным всегда, то есть
сколько бы вы ни запускали приложение, id элемента управления будет всегда
одинаковым, однако это справедливо для тех программ, которые разработаны,
так сказать, по "стандартной технологии", когда id прописывается в секции
ресурсов исполняемого файла или dll (что как раз и обеспечивает его
неизменность). В тех приложениях, где id генерируется динамически, его
значение постоянством не обладает (обычно в этих случаях id совпадает с
handle). Такое поведение справедливо, например, для приложений, написанных
при помощи Delphi и Builder.

А причем тут язык скриптов JAWS? Ваш вопрос относится к организации
графического интерфейса Windows, поэтому ответы надо искать в документации
по программированию Win32 API.

Поскольку я ни разу вам лично ничего не объяснял, то делаю это специально
для вас.
0. Так как язык Бейсик вы уже знаете, то представьте, что параметры всех
существующих в системе на данный момент окон хранятся в массиве. Первый
элемент массива хранит параметры первого (по времени создания) окна,
второй -- второго, третий -- третьего. Так вот дескриптор окна в Windows --

это как раз номер элемента в массиве, хранящем параметры созданных окон
(понятное дело, что это сильно упрощенная модель).
1. Когда приложение создает окно, то операционная система присваивает вновь
созданному окну дескриптор, который остается неизменным все то время, пока
это окно существует.
2. Дескриптор -- это единственный атрибут окна, по которому операционная
система отличает одно окно от другого (все остальные параметры двух и более
окон могут совпадать и только дескрипторы будут отличаться).
3. Когда окно уничтожается (окно приложения уничтожается, когда закрывается
приложение, например, по Alt+F4; окно элемента управления, например, кнопки,
уничтожается, когда закрывается родительское окно и т. д.), то есть окно
перестает существовать как объект операционной системы (удаляется из
"массива" окон), то его дескриптор становиться "пустым" (то есть в "массиве"
под этим номером нет ничего).
4. То, что ошибочно называется "изменением дескриптора", на само деле
является результатом двух действий: закрытия прежнего окна и открытия нового
(разумеется, с новым дескриптором). Например, вы запускаете на выполнение
файл notepad.exe. Это приложение создает свое главное окно, которое получает
очередной дескриптор. Затем Все время, пока это окно будет присутствовать в
системе (существовать), его дескриптор будет неизменен.
Затем вы выгружаете (закрываете) приложение, соответственно, уничтожается
его главное окно (уничтожается означает, что оно не только "стирается" с
экрана, но и то, что из системы удаляются все сведения об этом окне). Затем
вы снова запускаете notepad.exe, который снова создает свое главное окно, но
это будет уже новое окно с новым дескриптором (с точки зрения операционной
системы). Хотя вполне непродвинутый пользователь может считать это окно все
тем же самым, что и было во время прежнего запуска notepad.exe.

Теперь, что касается control id. Если дескриптор назначает сама операционная
система, то id назначает программист, поэтому в двух разных приложениях
могут оказаться элементы управления с одинаковыми id, но в одном приложении,
как правило, совпадающих id быть не может (совпадение id возможно в случаях,
когда с этими элементами не связаны никакие действия, либо это ошибка в
проектировании интерфейса, либо это очень экстравагантный способ его
организации). id нужны программистом, чтобы точно связать определенный
программный код с определенным элементом управления. На этапе написания кода
программист не знает,какие дескрипторы получат окна его программы, но хочет,
чтобы при нажатии кнопки "Play" начинал воспроизводиться аудио-файл, поэтому
он назначает этой кнопке определенный id, а в соответствующей процедуре
проверяет id элемента, на котором нажата клавиша или щелкнули мышью, и, если
он равен id кнопки "Play", то вызывает соответствующую процедуру.
Если вы программируете в Visual Basic, то большинство механизмов
функционирования Windows от вас скрыто объектной моделью этой платформы,
поэтому рекомендую почитать книги о непосредственном программировании на
Win32 API.
Например тут
http://www.wasm.ru/publist.php?list=1
ищите туториалы по написанию ассемблерных программ под Win32 (минимум из
того, что нужно знать, но зато очень коротко).

Успехов. Анатолий.

Ответить   "i_chay" Tue, 19 Feb 2008 20:10:40 +0400 (#726266)

 

Приветствую уважаемый евгений!
вы пишете:

ссылка не работает.
может быть это только у меня?

Ответить   Александр Иванович Wed, 20 Feb 2008 13:09:53 +0500 (#726441)

 

Приветствую Александр.

Я дал не точную ссылку. Правильная такая:
Blindlists.narod.ru
Евгений Корнев.
E-mail: q148@l*****.ru.
Home Page: http://www.q148.land.ru
icq: 479973702

Ответить   Wed, 20 Feb 2008 17:52:04 +0700 (#726452)