Как получить текст из любой области экрана

Дата публикации:2004
Поделиться в Twitter Поделиться в F******k Поделиться в VKontakte Поделиться в Telegram Поделиться в Mastodon

Копировать, вырезать и вставлять текст, используя Буфер обмена, можно только тогда, когда этот текст доступен для системного курсора (каретки). Напомним, что системным называется курсор, связанный с вводом с клавиатуры. Он указывает место на экране, где будет отображаться вводимый текст. Количество элементов управления, в которых может быть активен системный курсор, весьма ограничено - это поля редактирования, списки выбора, комбинированные списки.

Часто, однако, возникает необходимость скопировать текст из той области экрана, которая недоступна для системного курсора, но доступна для Jaws-курсора. Например, если появилось сообщение об ошибке с многозначным кодом этой самой ошибки и необходимо этот код сообщить по электронной почте разработчику программы. Переписывать на слух, елозя Jaws-курсором по окну сообщения, занятие утомительное и потому весьма высока вероятность ещё одной ошибки - теперь уже в переписывании кода. Бывают случаи, когда информация, расположенная в окне какого-нибудь диалога, необходима для дальнейшей работы (например, сообщение о том, какие действия надо совершить на следующем этапе). Jaws читает окно диалога целиком в тот момент, когда оно становится активным, после чего прочитать его можно опять же целиком по комбинации клавиш Insert+B или Jaws-курсором. Но вам бы хотелось не просто прочитать это сообщение, а скопировать его куда-нибудь для последующего использования.

Для решения этой задачи в JAWS предусмотрен скрипт, который вызывается комбинацией клавиш Insert+Control+W (английская дабл ю) или Insert+Alt +W. Этот скрипт переносит видимый текст из активного окна в окно виртуального просмотра (VirtualViewer), в котором можно передвигаться системным курсором, выделять и копировать текст.

Однако бывают случаи, когда скопировать надо всего лишь одну строку, а в окне виртуального просмотра информации оказывается слишком много (средства контекстного поиска здесь отсутствуют). То есть опять придётся искать нужную строку, перечитывая в худшем случае не менее половины отображаемого текста. Поэтому сформулируем задачу следующим образом: скопировать строку текста из любого места экрана (где находится JAWS-курсор) и поместить ее сразу в Буфер обмена Windows. Попутно (в качестве примера) покажем, как скопировать весь видимый текст из активного окна напрямую в Буфер обмена. Решим эту задачу средствами языка сценариев Jaws.

Надеемся, что вы уже имеете опыт в написании, отладке и компиляции скриптов для Jaws for Windows. Приводимый ниже исходный код скриптов был проверен для Jaws версий 4.51 и выше.

; Скрипт, копирующий текущую строку в буфер обмена.
Script GrabLine ()
Var
String sLine
If !IsPCCursor() Then
	let sLine = GetLine();
	CopyToClipBoard(sLine)
	Say("Скопировано "+sLine, OT_MESSAGE)
Else
	Say("Используйте Jaws-курсор или невидимый курсор!",
		OT_MESSAGE)
EndIf
EndScript

;Скрипт, копирующий весь текст из окна в буфер обмена
Script GrabWindow
Var
String sBuf
If !IsPCCursor() Then
	let sBuf= GetWindowText (GetAppMainWindow (GetCurrentWindow ()), 0)
	CopyToClipBoard(sBuf)
	Say("Скопировано "+sBuf, OT_MESSAGE)
Else
	Say("Используйте Jaws-курсор или невидимый курсор!",
		OT_MESSAGE)
EndIf
EndScript

Поместите эти скрипты в default.jss, назначьте им «горячие» клавиши (например, Insert+Control+X и Insert+Control+Shift+X, откомпилируйте файл скриптов ) и проверьте их работу , вызвав диалоговое окно Свойства файла. Для этого откройте Проводник, встаньте на любой файл или папку и нажмите Alt+Enter. Теперь с помощью назначенных «горячих» клавиш вызывайте скрипт, после чего можете вставить содержимое буфера обмена, например, в Блокнот (Notepad).



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