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

[TC] Задача для скрипта

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

Не селен в скриптописании и затрудняюсь в решении даже, кажется, не
очень сложной задачи. Помогите, пожалуйста.

Дано:
1. Программа Becky!, которая имеет в заголовке основного окна
обязательную часть "- Becky!";
2. Списки писем типа ListView;
3. Выделение непрочитаных писем жирным шрифтом.

Нужно:
Только в основном окне при типе диалога ListView называть при попадании
на выделеный жирным шрифтом текст какое-нибудь слово. Например, слово
"непрочитано".

Подскажите, пожалуйста, как теперь всё это решить.
В принципе, можно просто схематически с указанием основных названий
требуемых скриптов.

Ответить   Vladimir Dovydenkov Fri, 16 Jul 2004 01:01:14 +0400 (#191736)

 

Ответы:

Поправочка небольшая....

Script Имя_из_списка_подмены ()
;уходим сначала на обычную обработку клавиши
PerformScript Имя_из_списка_подмены()

If IsPCCursor() && GetWindowTypeCode( GetCurrentWindow()) == WT_LISTVIEW
Then
If (GetCharacterAttributes () & ATTRIB_BOLD) then
SayString ("не читал")
endIf
EndIf
EndScript

Ответить   "Anatoly" Fri, 16 Jul 2004 10:32:30 +0400 (#192031)

 

Здравствуйте, Анатолий.

Всё великолепно работает, спасибо огромное.
Однако, есть ещё один дилетантский вопрос.
Мне нужно ввести ещё одно условие, кроме того, что тип окна -
ListView, нужно чтобы это окно в заголовке содержало конкретную строку.

Что-то вроде:

If StringContains (... , "- Becky!")> 0 Then

Одним словом, какая функция возвращает текст заголовка или верхнюю
строчку окна?

Ответить   Vladimir Dovydenkov Sat, 17 Jul 2004 02:56:17 +0400 (#192651)

 

Владимир!
В общем случае строку заголовка окна возвращает функция GetWindowName(), но
многое зависит от того, заголовок какого окна вы хотите получить. Как
известно, окном называется все (!) - от кнопки до всеохватывающего окна
приложения. Понятно. что кнопка заголовка не имеет, но некоторые внутренние
окна могут иметь заголовок, который отличается от заголовка главного окна.
Вот строка для получения заголовка главного окна (возвращает string):
GetWindowName(GetAppMainWindow(getCurrentWindow()))
Вот строка для получения заголовка текущего окна ( "текущее" означает,
что в нем системная каретка или над ним крыскин курсор) (возвращает string):
GetWindowName(getCurrentWindow())
Вот строка, которая позволяет определить, есть ли у текущего окна заголовок
(возвращает TRUE или FALSE:
HasTitleBar (GetCurrentWindow ())
Успехов. Анатолий.

Ответить   "Anatoly" Sat, 17 Jul 2004 10:34:24 +0400 (#192715)

 

Здравствуйте, Анатолий.

Original Message A> В общем случае строку заголовка окна возвращает функция GetWindowName(),

Спасибо.
Я поэкспериментирую с перечислеными функциями и подберу себе подходящую.
Ещё раз спасибо.

Ответить   Vladimir Dovydenkov Sat, 17 Jul 2004 19:36:38 +0400 (#192925)

 

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

Именно это или родительское?
Кстати, если нужно определить в нужном вы окне, а список является
окном, сначало лучше посмотреть имеет ли он уникальный ControlID.
Если да, то проверку проводить по нему, если нет, то можно и по
названию класса, если он уникален для этого окна и наконец по имени
родительского окна, но тогда, все такие окна для скрипта будут
одинаковы.
Информацию о
окне можно получить в режиме утилит, нажав ins+space.

Далее клавишими f3/shift+f3 перебирать тип информации, а клавишей f1
прослушать ее.

Ответить   Sat, 17 Jul 2004 09:59:44 +0400 (#192722)

 

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

Original Message СВ> VD> нужно чтобы это окно в заголовке содержало конкретную строку.

По Ins+Space, Real Name сообщает имя именно основного окна, то есть,
окна приложения.

Original Message СВ> Кстати, если нужно определить в нужном вы окне, а список является

Где этот ControlId сообщается?
По Ins+Space такого пункта нет.

Ответить   Vladimir Dovydenkov Sat, 17 Jul 2004 19:36:23 +0400 (#192924)

 

Владимир!
Идентификатор и класс окна можно получить, нажав Insert +Control +F1.
После прослушивания нажмите ESC, чтобы убрать диалог с экрана.
Пользуясь случаем, напоминаю что понятием "родительское" окно, обозначается
окно более высокого уровня по отношению к текущему. Не всегда родительское
окно - это главное окно приложения. иерархия окон может быть очень
разветвленной.
Удачи. Анатолий.

Ответить   "Anatoly" Sun, 18 Jul 2004 09:15:24 +0400 (#193112)

 

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

Этот пункт озвучивается, как "control".
Нужно учесть, что не все выставляют контролы, поэтому нужно проверить,
что бы номер контрола отличался от указателя, этот пункт
озвучивается, как "focus".

Или, как предложил Анатолий.
Там эти пункты, соответственно ControlID и Handle.

Ответить   Sun, 18 Jul 2004 10:32:44 +0400 (#193136)

 

Общий подход:
Include "hjconst.jsh" ;обязательно
Script Имя_из_списка_подмены ()
If IsPCCursor() && GetWindowTypeCode( GetCurrentWindow()) == WT_LISTVIEW
Then
If (GetCharacterAttributes () & ATTRIB_BOLD) then
SayString ("не читал")
endIf
EndIf
;уходим на обычную обработку клавиши
PerformScript Имя_из_списка_подмены()
EndScript

список имен скриптов для подмены (в квадратных скобочках ассоциированная
клавиша):
SayPriorLine [стрелка вверх]
SayNextLine[стрелка вниз]
JawsPageUp [клавиша PgUp]
JawsPageDown [клавиша PgDn]
JawsHome [клавиша Home]
JawsEnd [клавиша End]

Единственное, чего здесь нет, это скрипта, который обрабатывал бы нажатие
клавиши с буквой (переход по первой букве элемента списка).
Скрипты должны работать так: при переходе на очередной элемент списка,
звучит "не читал" и наименование элемента списка, если элемент списка
выделен жирным шрифтом.
Разумеется, для окна, в котором предполагается работа скрипта, должен быть
установлен класс ListView в Диспетчере окон (Window Class Reassign).
Скрипты должны быть помещены в файл имя_приложения.jss (но ни в коем случае
не в default.jss).
Внимание! Скрипты переназначают клавиши, которые прописаны в файле
default.jss, поэтому Диспетчер скриптов будет выдавать предупреждения.

Ответить   "Anatoly" Fri, 16 Jul 2004 10:26:42 +0400 (#192032)