Всё, что вы хотели знать о написании скриптов для JFW, но не знали, кого спросить

(Переработанный и дополненный вариант)
Источник:www.tiflocomp.ru
Дата публикации:2004
Twitter Facebook Vkontakte

Приложение A. Ответы на домашние задания

Ответ на домашнее задание # 1

Script LastFourFiles ()
SpeechOff ()
; В нижеследующей комбинации клавиш буква Ф должна быть латинской для англоязычного меню
; и русской для русскоязычного
;Иногда комбинации клавиш с русскими буквами могут не работать
{Alt+F}	
Pause ()
NextLine ()
NextLine ()
NextLine ()
NextLine ()
NextLine ()
NextLine ()
NextLine ()
SpeechOn ()
SayLine ()
NextLine ()
SayLine ()
NextLine ()
SayLine ()
NextLine ()
SayLine ()
SpeechOff ()
{escape}
{escape}
Pause ()
SpeechOn ()
EndScript

Ответ на домашнее задание # 2

Script SpeakWindowState ()
JAWSCursor ()
SaveCursor ()
RouteJAWSToPC ()
JAWSPageUp ()
JAWSEnd ()
PriorWord ()
SayWord ()
RestoreCursor ()
PCCursor ()
EndScript

Обратите внимание, что в этом примере мы активизировали Jaws курсор, прежде чем использовать функцию SaveCursor. Поскольку Jaws курсор является активным курсором, когда выполняется функция SaveCursor, функция RestoreCursor вернет в первоначальное положение именно Jaws курсор. Функция PCCursor () в конце снова включит PC курсор. Это необходимо, поскольку скрипт, когда работал, включил Jaws курсор (На самом деле, необходимо в начале скрипта проверить, а был ли активным именно PC курсор, когда был вызван скрипт. Иначе получится, что скрипт будет всегда в конце своей работы включать PC курсор, даже когда в этом нет необходимости. - Прим. сост.).

Ниже приводится ответ на "Отлично"

Script SpeakWindowState ()
InvisibleCursor ()
SaveCursor ()
RouteInvisibleToPC ()
JAWSPageUp ()
JAWSEnd ()
PriorWord ()
If GetWord () == "Restore Symbol" Then
SayString ("Maximized")
ElIf GetWord () == "Maximize Symbol" Then
SayString ("Restored")
Else
SayString ("Couldn't find the symbol")
EndIf
RestoreCursor ()
PCCursor ()
EndScript

Ответ к домашнему заданию # 3

Script PlaybackPosition ()
SaveCursor ()
RouteInvisibleToPC ()
InvisibleCursor ()
JAWSPageUp ()
NextLine ()
NextLine ()
NextLine ()
JAWSHome ()
SayString ("Current time is")
SayWord ()
SayString ("seconds out of")
NextWord ()
NextWord ()
SayWord ()
SayString ("seconds")
RestoreCursor ()
EndScript

Ответ к домашнему заданию # 4

Include "JAWSWINS.JSH"
Include "JAWSWINS.JMH"
Include "HJCONST.JSH"
Include "HJGLOBAL.JSH"

Ответ к домашнему заданию # 5

Script CheckAndReset ()
Var
String TotalTime ;Хранит полное время звучания звукового файла
SaveCursor ()
RouteInvisibleToPC ()
InvisibleCursor ()
JAWSPageUp ()
NextLine ()
NextLine ()
NextLine ()
JAWSEnd ()
PriorWord ()
Let TotalTime = GetWord ()
JAWSHome ()
If GetWord () == "0.00" Then
SayString ("At the beginning of the recording")
ElIf GetWord () != "0.00" && GetWord () < TotalTime Then
SayString ("Playback only partially complete")
ElIf GetWord () == TotalTime Then
SayString ("Playback is complete.")
JAWSCursor ()
RouteJAWSToPC ()
JAWSHome ()
Pause ()
LeftMouseButton ()
Pause ()
InvisibleCursor ()
If GetWord () == "0.00" Then
SayString ("Rewind complete")
Else
SayString ("Rewind failed. Please check your batteries.")
EndIf
EndIf
EndScript

Обратите внимание, что Jaws может произносить некоторые дополнительные фразы, такие как "Seek to Start" или "Seek to End" когда он выполняет перемотку. Все правильно.

Ответ к домашнему заданию # 6

String Function SayAllCaps (string CurrentWord)
If CurrentWord < "a" || CurrentWord > "zzzzz" Then
Return ""
EndIf
If (StringContains (CurrentWord, "a")) || (StringContains (CurrentWord, "b"))
 || (StringContains (CurrentWord, "c")) || (StringContains (CurrentWord, "d"))
|| (StringContains (CurrentWord, "e")) || (StringContains (CurrentWord, "f"))
|| (StringContains (CurrentWord, "g")) || (StringContains (CurrentWord, "h"))
|| (StringContains (CurrentWord, "i")) || (StringContains (CurrentWord, "j"))
|| (StringContains (CurrentWord, "k")) || (StringContains (CurrentWord, "l"))
|| (StringContains (CurrentWord, "m")) || (StringContains (CurrentWord, "n"))
|| (StringContains (CurrentWord, "o")) || (StringContains (CurrentWord, "p"))
|| (StringContains (CurrentWord, "q")) || (StringContains (CurrentWord, "r"))
|| (StringContains (CurrentWord, "s")) || (StringContains (CurrentWord, "t"))
|| (StringContains (CurrentWord, "u")) || (StringContains (CurrentWord, "v"))
|| (StringContains (CurrentWord, "w")) || (StringContains (CurrentWord, "x"))
|| (StringContains (CurrentWord, "y")) || (StringContains (CurrentWord, "z"))
|| (StringContains (CurrentWord, "1")) || (StringContains (CurrentWord, "2"))
|| (StringContains (CurrentWord, "3")) || (StringContains (CurrentWord, "4"))
|| (StringContains (CurrentWord, "5")) || (StringContains (CurrentWord, "6"))
|| (StringContains (CurrentWord, "7")) || (StringContains (CurrentWord, "8"))
|| (StringContains (CurrentWord, "9")) || (StringContains (CurrentWord, "0")) Then
Return ""
EndIf
Return "All Caps"
EndFunction
Script SayWord()
If (IsSameScript ()) Then
SayString (SayAllCaps (GetWord ()))	
SpellWord()	
AddHook (HK_SCRIPT, "SpellWordHook")
Else
SayWord ()
EndIf
EndScript

Ответ к домашнему заданию # 7

Edit Window:
SayTypeAndText - Edit
Focus - Это ручка окна, поэтому она всегда изменяется
ControlID - 59648
Class - Edit
Type - RichEdit
SubTypeCode - 3
Real Name - Document WordPad (assuming you have not loaded a file)
Filename Window:
SayTypeAndText - Filename Edit
Focus - Это ручка окна, поэтому она всегда изменяется
ControlID - 1152
Class - Edit
Type - Edit
SubTypeCode - 3
Real Name Open

Обратите внимание, что если вы посмотрите в HJCONST.JSH, вы найдёте, что код подтипа для 3 равен окну редактирования. В этих случаях код подтипа не предоставляет никакой дополнительной информации, кроме класса. Обратите внимание также, что два окна имеют разные контрольные идентификаторы, даже несмотря на то, что оба они являются окнами редактирования.

Ответ к домашнему заданию # 8

;This is the script file for SPAMKILLER.EXE, created by Michael Glen
;This file was last updated on July 4, 1776.
Include "SPAMKILLER.JSH" ;Header file
Include "SPAMKILLER.JSM" ;Message file
Include "HJCONST.JSH"
Include "HJGLOBAL.JSH"
Globals
Int GlobalSpamInteger,
String GlobalSpamString,
Handle GlobalSpamHandle
Const
SpammerOne = 1
SpammerTwo = 2
SpammerThree =3

Ответ к домашнему заданию # 9

Script IsThisOpenEdit ()
If GetWindowName (GetRealWindow (GetFocus ())) == "Open" Then
SayString ("In the Open dialog,")
If GetWindowClass (GetFocus ()) == "Edit" Then
SayString ("and in the filename field.")
Else
SayString ("but not in the filename field.")
EndIf ;Are we in the edit field?
Else
SayString ("Not in the Open dialog")
EndIf ;Are we in the Open dialog?
EndScript

Ответ к домашнему заданию # 10

Каждая ошибка показана ниже строкой, начинающейся с *** после строки, содержащей ошибку.

Script SayDefaultButton (Int Button )
***Скрипты не используют параметры, параметры используют только функции
vars
***Var, а не Vars
	string DefaultButtonName,
***Последняя или единственная переменная не должна оканчиваться запятой
if (DialogActive ())
***В конце строки должно быть Then
	let DefaultButtonName == GetDefaultButtonName
***в этом типе утверждения, где вы присваиваете значение, должен быть только один знак равенства
If (DefaultButtonName != " ") then
***Между кавычками пробелов быть не должно.
		if (GetVerbosity () = 0) then
***В этом утверждении должно быть два знака равенства.
			SayString ("msg70") ;"default button is"
***Внутри скобок кавычек быть не должно.
		EndIf ()
***После Endif скобок не требуется.
		SayString (DefaultButtonName))
***В конце строки лишняя закрывающая скобка.
	Else ()
***После утверждения Else скобок ставить не нужно.
		SayString (msg444) : "Can not determine default button in this dialog box "
***Комментарий должен начинаться с точки с запятой, а не с двоеточия.
	End If
***В операторе Endif пробелов быть не должно.
Else ()
***После оператора Else скобки не ставятся.
	SayString (msg71 ;"not in a dialog box"
***После MSG71 должна быть закрывающая скобка.
EndIf ()
***После EndIf скобки не ставятся.
End Script
***В EndScript пробелов быть не должно.

Скрипт, в таком виде, в каком он должен быть, и в каком виде он присутствует в default.jss, приводится ниже.

Script SayDefaultButton ()
var
	string DefaultButtonName
if (DialogActive ()) then
	let DefaultButtonName = GetDefaultButtonName ()
	if (DefaultButtonName != "") then
		if (GetVerbosity () == 0) then
			SayString (msg70) ;"default button is"
		EndIf
		SayString (DefaultButtonName)
	else
		SayString (msg444) ; "Can not determine default button in this dialog box ")
	EndIf
else
	SayString (msg71) ;"not in a dialog box"
EndIf
EndScript


Распространение материалов сайта означает, что распространитель принял условия лицензионного соглашения.
Идея и реализация: © Владимир Довыденков и Анатолий Камынин,  2004-2019