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

[TC] Помощь в написании скрипта

Здравствуйте, всем!
Пишу скрипт в wordPad, для того чтобы он сказал последний открытый документ.
Пишу так, как прочёл в "Все что вы хотели знать о написании скриптов для JFW".
У меня получился такой скрипт:

Script LastFile ()
SpeechOff ()
{Alt+F}
Pause ()
NextLine ()
NextLine ()
NextLine ()
NextLine ()
NextLine ()
NextLine ()
NextLine ()
SpeechOn ()
SayLine ()
SpeechOff ()
{escape}
{escape}
Pause ()
SpeechOn ()
EndScript
Последний открытый документ в WordPad у меня Книга.txt.
После срабатывания скрипта я хотел услышать Книга.txt, а слышу "Объект".
Подскажите что в скрипте не так.
С уважением Юрий

Ответить   Sat, 3 Oct 2009 16:57:15 +0300 (#914184)

 

Ответы:

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

Из сообщения от 03.10.2009 19:03:

Вы посылаете приложению WordPad комбинацию клавиш,
соответствующую нелокализованной версии,
т. е. открываете меню "File" (английское).
В локализованной версии вместо этого Вы получаете пункт из меню "Вставка",
которое открывается горячей клавишей "А" (русская)
находящейся в кириллической раскладке на клавише "F" (латинская).

Чтобы избежать зависимости от локализации,
используя данную методику доступа к меню,
открывайте меню с помощью ActivateMenuBar (),
а затем открывайте подменю "файл" эмуляцией нажатия стрелки вниз,
используя "лишний" NextLine () .

Script LastFile ()
SpeechOff ()
; Проверяем меню на активность
; Если открыто -- закрываем
If MenusActive () Then
ActivateMenuBar ()
EndIf
ActivateMenuBar () ; Активизируем меню
NextLine () ; Открываем пункт меню "Файл"
NextLine ()
NextLine ()
NextLine ()
NextLine ()
NextLine ()
NextLine ()
NextLine ()
SpeechOn ()
SayLine ()
SpeechOff ()
ActivateMenuBar () ; Деактивизируем открытое меню
Pause ()
SpeechOn ()
EndScript

Для практического решения Вашей задачи можете использовать
более оптимальный, хотя и менее очевидный способ:

Include "msaaConst.jsh"
;Const
; OBJID_MENU = 0xFFFFFFFDL

Script LastFile2 ()
Var
int ChildID
SayString(GetObjectFromEvent(getTopLevelWindow(getFocus()), ObjID_Menu, 0,
ChildID).accChild(1).accChild(1).accName(10))
EndScript

Почтовик разобьет длинную строку SayString ,
поэтому в диспетчере скриптов исправьте ее.
Кроме того, если Вас не обнаружится файл msaaConst.jsh,
закомментируйте строку его включения,
и раскомментируйте строки с объявлением соответствующей константы.

С уважением, Руслан Усачев

Ответить   Sun, 4 Oct 2009 11:40:21 +0300 (#914346)

 

привет Руслан!
к твоему практически исчерпывающему объяснению хочу добавить лишь следующее:
в некоторых программах
(на счёт упоминавшейся программы сказатьь точно не могу)
лучше к последнему файлу двигать не вниз а вверх.
так как например максимальное число ранее открытых файлов 8
а если их открывалось 3 и мы будем двигать сверху вниз то промахнёмся.
Виктор

Ответить   Mon, 5 Oct 2009 03:54:46 +0400 (#914568)

 

Всем здравствуйте.

Voland спрашивал про ярлык на рабочем столе State.ini, который
постоянно появляется.

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

Файл State.ini появляется на вашем рабочем столе от запуска
утилиты TBLOrder.exe.
Запускайте эту утилиту не с рабочего стола.
Тогда файл State.ini не будет появляться на рабочем столе.
А вообще он безвредный.

Ответить   Fri, 9 Oct 2009 20:39:11 +0600 (#918169)