Что нового

Нужны примеры, как можно нажать на кнопку

lemonia

Новичок
Сообщения
126
Репутация
0
Версия AutoIt: 3.3.12.0

Описание:
Прошу привести примеры, как можно нажать на кнопку, так как пока только начал изучать AutoIt программирование и хочу иметь готовый кусок кода для применения, а также инструкцию, как данные этой кнопки для подстановки в скрипт можно получить. Window Info данные кнопки не определяются. Файл программы http://vedomo.ru/a/s/paketnaia/DjvuOCR.zip.
 

Вложения

  • DJVUOCR.jpg
    DJVUOCR.jpg
    58.3 КБ · Просмотры: 29
Автор
L

lemonia

Новичок
Сообщения
126
Репутация
0
Благодарю. А как можно подняться на уровень вверх?
Вот вместе с той кнопкой, которую Вы подсказали, сначала делаю:
Код:
;ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:16]')
ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:10]')
 

Вложения

  • Поднятся на уровень вверх.jpg
    Поднятся на уровень вверх.jpg
    128.4 КБ · Просмотры: 20

Khaibit

Осваивающий
Сообщения
103
Репутация
25
У меня нет XP, но если вам известен путь к файлу его можно вставить в поле "Имя файла" и нажать открыть,
Код:
ControlSetText('Select DJVU file', '', '[CLASS:Edit; INSTANCE:1]', 'путь'); вставляешь путь к файлу
ControlClick('Select DJVU file', '', '[CLASS:Button; INSTANCE:2]'); нажимаем открыть

можно еще попробовать нажать BackSpace
Код:
WinActivate('Select DJVU file', '')
ControlSend('Select DJVU file', '', '', '{BACKSPACE}')
 
Автор
L

lemonia

Новичок
Сообщения
126
Репутация
0
BACKSPACE не работает не в виде этого кода, не на клавиатуре. Допустим нахожусь в окне выбора файла, нажимаю его и на уровень вверх не перескакиваю. Горячая клавиша по описанию в интернете есть, а как ей пользоваться непонятно.


Добавлено:
Сообщение автоматически объединено:

Вообщем понял, что чтобы BACKSPACE сработало, надо мышкой кликнуть внутри окна, там где файлы. Можете ли Вы подправить код с учётом этого? :scratch:
 

Khaibit

Осваивающий
Сообщения
103
Репутация
25
В окно не нужно нажимать, для этого нужна строчка, она активирует окно.
Код:
WinActivate('Select DJVU file', '')

Изначально неверный подход, допустим вы подниметесь на уровень выше, а дальше нужно будет еще выбирать папку, файл,
значит должно быть известно место где лежат нужные файлы. Это так?
Укажите в скрипте путь к папке, положите скрипт рядом с программой.
Код:
$path = 'C:\folder\' ; вставить путь в папке с файлами
Run('DjvuOCR.exe'); запуск программы рядом со скриптом
WinWait('[Class:CustomDlg]')
ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:16]')
Sleep(250)
ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:10]')
WinWait('Select DJVU file', '')
ControlSetText('Select DJVU file', '', '[CLASS:Edit; INSTANCE:1]', $path)
ControlClick('Select DJVU file', '', '[CLASS:Button; INSTANCE:2]')
$search = FileFindFirstFile($path & '*.djvu')
Local $all
While 1
	$file = FileFindNextFile($search) 
	If @error Then ExitLoop
	$all &= '"' & $file & '" '
WEnd
ControlSetText('Select DJVU file', '', '[CLASS:Edit; INSTANCE:1]', $all)
ControlClick('Select DJVU file', '', '[CLASS:Button; INSTANCE:2]')
 
Автор
L

lemonia

Новичок
Сообщения
126
Репутация
0
Благодарю. Пока что не знаю, как всё это систематизировать в соответствии с полной задачей скрипта. Посмотрите пожалуйста скриншоты в архиве
http://vedomo.ru/a/s/temp/DJVUOCR-s-primerami-dlia-raspakovki.zip
Надо обработать не одну папку, а все по очереди, автоматически беря ещё не обработанную. Там папки с непоследовательными именами. Если их невозможно обрабатывать в таком виде, то могу присваивать имена по порядку, например 1,2,3,4,5 или например 3,4,5,6,7,8. На скриншотах устанавливал курсор на кнопке, на которую надо нажимать.


Добавлено:
Сообщение автоматически объединено:

По поводу пункта «10Выйти на уровень вверх наверное,выбрать эту же папку,ввести её номер и Enter». Это таким образом в каждой папке сохраняется файл настроек для этой папки с именем таким же, как и номер папки.
 

Вложения

  • Скриншоты.jpg
    Скриншоты.jpg
    194.8 КБ · Просмотры: 10

Khaibit

Осваивающий
Сообщения
103
Репутация
25
Я так понимаю сохранять файлы нужно в ту же папку где они были, а программа их перезапишет?
Можно и несколько папок, если они сами в одной папке, так вообще без проблем.
 
Автор
L

lemonia

Новичок
Сообщения
126
Репутация
0
В каждой папке, где DJVU файлы, распаковываются картинки из этих же файлов и сохраняется файл настроек с этим же именем, что и имя этой папки на шаге
«10Выйти на уровень вверх наверное,выбрать эту же папку,ввести её номер и Enter»

Ещё забыл, что после этого шага надо нажать кнопку «Create FR8 Batch» и подождать секунд 10.

а программа их перезапишет?
Программа их не перезапишет, они будут лежать в этой папке для того, чтобы их там распознала программа Finereader в последствии, то есть это будут потом уже файлы с текстом на следующем этапе.
 

Вложения

  • Create FR8 Batch.jpg
    Create FR8 Batch.jpg
    67.2 КБ · Просмотры: 10

Khaibit

Осваивающий
Сообщения
103
Репутация
25
Код:
$path = '\faili-primerov\' ; вставить путь к папке с папками
Run('DjvuOCR.exe'); запуск программы рядом со скриптом
WinWait('[Class:CustomDlg]')
WinActivate('[Class:CustomDlg]')
ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:16]');decoder
Sleep(250)
$search1 = FileFindFirstFile($path & '*.*')
Local $folder
While 1
	$folder = FileFindNextFile($search1)
	If @error Then ExitLoop
	If @extended = 1 Then
		ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:10]');add
		WinWait('Select DJVU file', '')
		ControlSetText('Select DJVU file', '', '[CLASS:Edit; INSTANCE:1]', $path & $folder)
		ControlClick('Select DJVU file', '', '[CLASS:Button; INSTANCE:2]'); нажимаем открыть
		Sleep(250)
		ControlFocus('Select DJVU file', '','[CLASS:DirectUIHWND; INSTANCE:2]')
		ControlSend('Select DJVU file', '','[CLASS:DirectUIHWND; INSTANCE:2]', '^a')
		Sleep(250)
		ControlClick('Select DJVU file', '', '[CLASS:Button; INSTANCE:2]') ; нажимаем открыть
		WinWaitClose('Select DJVU file', '')
		ControlSetText('[Class:CustomDlg]', '', '[CLASS:Edit; INSTANCE:2]', $path & $folder); вставляем папку назачения
		Sleep(250)
		ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:18]');жмем прогресс
		WinWaitClose('Decoding process...', 'Stop decoding')
		WinWait('Decoder', '')
		ControlClick('Decoder', '', '[CLASS:Button; INSTANCE:1]');yes
		WinWait('Name for output OCR TXT file', '')
		ControlSetText('Name for output OCR TXT file', '', '[CLASS:Edit; INSTANCE:1]', $folder)
		Sleep(250)
		ControlClick('Name for output OCR TXT file', '', '[CLASS:Button; INSTANCE:2]');save
		Sleep(250)
		ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:32]');Create FR8 Batch
		Sleep(10000);10sek
		ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:14]'); мжеме очиститиь
		Sleep(250)
	EndIf
WEnd

как-то так, ошибки можно отловит и посчитать, но нужен заголовок окна и класс кнопки, просто повторить ошибку не удалось
 
Автор
L

lemonia

Новичок
Сообщения
126
Репутация
0
Благодарю. Останавливается в момент выбора папки с файлами. Думаю, что не переходит внутрь окна, чтобы можно было нажать Cntrl+A. Видео:
http://vedomo.ru/a/s/temp/PICT2753.AVI

По поводу, что ранее обсуждали насчёт перехода на уровень вверх. Вот такой вариант, который возможно можно усовершенствовать, записывал рекордером из папки установки AutoIT (C:\Program Files\AutoIt3\Extras\Au3Record\Au3Record.exe) и вместо координат мыши подставлял из вашего примера, это работало:
Код:
ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:16]')
ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:10]')
_WinWaitActivate("Select DJVU file","")
Send("{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{BACKSPACE}")

Ещё делал пример того, как должны выглядеть файлы после обработки:
http://vedomo.ru/a/s/temp/Primeri-papok-s-failami-posle-DJVUOCR.zip



Добавлено:
Сообщение автоматически объединено:

На всякий случай вариант без перехода на уровень вверх:
Код:
WinWaitActivate("Select DJVU file","")
Send("{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{TAB}{CTRLDOWN}a{CTRLUP}{ENTER}")
Видео:
http://vedomo.ru/a/s/temp/PICT2754.AVI
 

Вложения

  • DJVUOCR-ostanovka.jpg
    DJVUOCR-ostanovka.jpg
    55.5 КБ · Просмотры: 5
A

Alofa

Гость
OffTopic:

Хмм... Первый раз встречаюсь с тем, что "Window Info" и "Control Viewer" видят по разному.
Нет, ну понятно - разные разработчики, их подготовка и знания, но... Но как так-то? :stars:
 

Khaibit

Осваивающий
Сообщения
103
Репутация
25
lemonia сказал(а):
Благодарю. Останавливается в момент выбора папки с файлами. Думаю, что не переходит внутрь окна, чтобы можно было нажать Cntrl+A.
А раскладка клавиатуры какая стоит?
попробуйте заменить строку
Код:
ControlSend('Select DJVU file', '','[CLASS:DirectUIHWND; INSTANCE:2]', '^a')

на
Код:
ControlSend('Select DJVU file', '','[CLASS:DirectUIHWND; INSTANCE:2]', '^ф')

или на
Код:
ControlSend('Select DJVU file', '','[CLASS:DirectUIHWND; INSTANCE:2]', '{CTRLDOWN}a{CTRLUP}')
 
Автор
L

lemonia

Новичок
Сообщения
126
Репутация
0
раскладка клавиатуры английская. попробовал оба варианта, они не работают :'(. То же самое в окне, изменений нет.
 

Khaibit

Осваивающий
Сообщения
103
Репутация
25
lemonia сказал(а):
раскладка клавиатуры английская. попробовал оба варианта, они не работают :'(. То же самое в окне, изменений нет.
Поставил XP на виртуалку, понял где возможна загвоздка, попробуйте так

Код:
$path = '\faili-primerov\' ; вставить путь к папке с папками
Run('DjvuOCR.exe'); запуск программы рядом со скриптом
WinWait('[Class:CustomDlg]')
WinActivate('[Class:CustomDlg]')
ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:16]');decoder
Sleep(250)
$search1 = FileFindFirstFile($path & '*.*')
Local $folder
While 1
	$folder = FileFindNextFile($search1)
	If @error Then ExitLoop
	If @extended = 1 Then
		ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:10]');add
		WinWait('Select DJVU file', '')
		ControlSetText('Select DJVU file', '', '[CLASS:Edit; INSTANCE:1]', $path & $folder)
		ControlClick('Select DJVU file', '', '[CLASS:Button; INSTANCE:2]'); нажимаем открыть
		Sleep(250)
		ControlFocus('Select DJVU file', '', '[CLASS:DirectUIHWND; INSTANCE:2]')
		ControlListView('Select DJVU file', '', '[CLASS:SysListView32; INSTANCE:1]', 'SelectAll')
		Sleep(250)
		ControlClick('Select DJVU file', '', '[CLASS:Button; INSTANCE:2]') ; нажимаем открыть
		WinWaitClose('Select DJVU file', '')
		ControlSetText('[Class:CustomDlg]', '', '[CLASS:Edit; INSTANCE:2]', $path & $folder); вставляем папку назачения
		Sleep(250)
		ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:18]');жмем прогресс
		WinWaitClose('Decoding process...', 'Stop decoding')
		WinWait('Decoder', '')
		ControlClick('Decoder', '', '[CLASS:Button; INSTANCE:1]');yes
		WinWait('Name for output OCR TXT file', '')
		ControlSetText('Name for output OCR TXT file', '', '[CLASS:Edit; INSTANCE:1]', $folder)
		Sleep(250)
		ControlClick('Name for output OCR TXT file', '', '[CLASS:Button; INSTANCE:2]');save
		Sleep(250)
		ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:32]');Create FR8 Batch
		Sleep(10000);10sek
		ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:14]'); мжеме очиститиь
		Sleep(250)
	EndIf
WEnd
 
Автор
L

lemonia

Новичок
Сообщения
126
Репутация
0
Благодарю, заработало. Только файлы настроек с расширением .dprj не разложились по папкам, а разместились в одной из папок. Если так удобнее для целей дальнейшей запаковки после распознавания Finereader, то их можно не распределять по папкам, а размещать в корневой директории всех файлов, приделывая например спереди горизонтальную палочку: -8.dprj, -10.dprj, -11.dprj. Запаковку тоже Вас попрошу автоматизировать после пасхальных праздников. При запаковке из другой вкладки надо будет выбирать этот файл из окна. После пасхальных праздников наделаю скриншотов по процессу запаковки (не знаю, сколько дней после пасхи длятся праздники, когда надо ограничивать себя в работе, перенося на потом). Там надо, чтобы когда буду подготавливать распознанные Finereader примеры файлов, чтобы путь совпал. директорию с подпапками разместить на диске C? У Вас наверное в виртуальной машине диск С есть, как обычно бывает при установке операционной системы?
На скриншоте показал, что выбор файла настроек, это обычный выбор файла в окне.
Также написал в личку.
 

Вложения

  • Выбор файла настроек для папки при запаковке после распознавания.jpg
    Выбор файла настроек для папки при запаковке после распознавания.jpg
    100 КБ · Просмотры: 11

Khaibit

Осваивающий
Сообщения
103
Репутация
25
lemonia сказал(а):
Только файлы настроек с расширением .dprj не разложились по папкам, а разместились в одной из папок. Если так удобнее для целей дальнейшей запаковки после распознавания Finereader, то их можно не распределять по папкам, а размещать в корневой директории всех файлов, приделывая например спереди горизонтальную палочку: -8.dprj, -10.dprj, -11.dprj. чтобы путь совпал. директорию с подпапками разместить на диске C? У Вас наверное в виртуальной машине диск С есть
Точно все в одной папке, не заметил, можно и в корень, а можно и по папкам, уже вам решать, как вам удобней.
Диск С, да.
Дальше будем посмотреть что да как.
Вот так в отдельные папки.
Код:
$path = '\faili-primerov\' ; вставить путь к папке с папками
Run('DjvuOCR.exe'); запуск программы рядом со скриптом
WinWait('[Class:CustomDlg]')
WinActivate('[Class:CustomDlg]')
ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:16]');decoder
Sleep(250)
$search1 = FileFindFirstFile($path & '*.*')
Local $folder
While 1
	$folder = FileFindNextFile($search1)
	If @error Then ExitLoop
	If @extended = 1 Then
		ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:10]');add
		WinWait('Select DJVU file', '')
		ControlSetText('Select DJVU file', '', '[CLASS:Edit; INSTANCE:1]', $path & $folder)
		ControlClick('Select DJVU file', '', '[CLASS:Button; INSTANCE:2]'); нажимаем открыть
		Sleep(250)
		ControlFocus('Select DJVU file', '', '[CLASS:DirectUIHWND; INSTANCE:2]')
		ControlListView('Select DJVU file', '', '[CLASS:SysListView32; INSTANCE:1]', 'SelectAll')
		Sleep(250)
		ControlClick('Select DJVU file', '', '[CLASS:Button; INSTANCE:2]') ; нажимаем открыть
		WinWaitClose('Select DJVU file', '')
		ControlSetText('[Class:CustomDlg]', '', '[CLASS:Edit; INSTANCE:2]', $path & $folder); вставляем папку назачения
		Sleep(250)
		ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:18]');жмем прогресс
		WinWaitClose('Decoding process...', 'Stop decoding')
		WinWait('Decoder', '')
		ControlClick('Decoder', '', '[CLASS:Button; INSTANCE:1]');yes
		WinWait('Name for output OCR TXT file', '')
		ControlSetText('Name for output OCR TXT file', '', '[CLASS:Edit; INSTANCE:1]', $path&$folder)
		Sleep(250)
		ControlClick('Name for output OCR TXT file', '', '[CLASS:Button; INSTANCE:2]');save
		Sleep(250)
		ControlSetText('Name for output OCR TXT file', '', '[CLASS:Edit; INSTANCE:1]', $folder)
		Sleep(250)
		ControlClick('Name for output OCR TXT file', '', '[CLASS:Button; INSTANCE:2]');save
		Sleep(250)
		ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:32]');Create FR8 Batch
		Sleep(10000);10sek
		ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:14]'); мжеме очиститиь
		Sleep(250)
	EndIf
WEnd
 
Автор
L

lemonia

Новичок
Сообщения
126
Репутация
0
Благодарю. Заработало. На следующей неделе в среду или четверг планирую разместить в теме архив со скриншотами и файлами.
 
Автор
L

lemonia

Новичок
Сообщения
126
Репутация
0
Здравствуйте. Подготовил архив https://cloud.mail.ru/public/HJMJ/EtLRgct78
 

Khaibit

Осваивающий
Сообщения
103
Репутация
25
Вот на тест, по поводу окна "теста проекта" - тут нужно определиться с максимумом по времени (пока 30 сек), по истечении которого останавливать обработку, или делать скрин.
Код:
$path = 'C:\djvu\'
Run('DjvuOCR.exe'); запуск программы рядом со скриптом
WinWait('[Class:CustomDlg]')
WinActivate('[Class:CustomDlg]')
ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:18]')
Sleep(250)
$search1 = FileFindFirstFile($path & '*.*')
Local $folder, $count, $i
While 1
	$folder = FileFindNextFile($search1)
	If @error Then ExitLoop
	If @extended = 1 Then
		ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:29]');load decoder project
		WinWait('Select DECODER project', '')
		ControlSetText('Select DECODER project', '', '[CLASS:Edit; INSTANCE:1]', $path & $folder);выбираем папку проекта
		Sleep(250)
		ControlClick('Select DECODER project', '', '[CLASS:Button; INSTANCE:2]');открыть
		Sleep(250)
		ControlSetText('Select DECODER project', '', '[CLASS:Edit; INSTANCE:1]', $folder);выбираем файл проекта
		Sleep(250)
		ControlClick('Select DECODER project', '', '[CLASS:Button; INSTANCE:2]');открыть
		Sleep(250)
		ControlSetText('[Class:CustomDlg]', '', '[CLASS:Edit; INSTANCE:3]', $path & $folder);выбираем папку fine reader
		Sleep(250)
		ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:25]');тест проекта
		WinWaitClose('Processing...', 30);ждем закрытия окна теста, тут нужно определиться с максимумом, пока 30 сек
		If @error Then ;выход по тайм-ауту.
			ControlClick('Processing...', '', '[CLASS:Button; INSTANCE:2]'); останавливаем обработку
		Else
			$count = UBound(StringRegExp(FileRead($path & $folder & '\' & $folder & '.DPRJ'), 'file=', 3));получаем количество файлов в проекте
			ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:26]');жмем progress
			For $i = 1 To $count
				WinWaitClose('Processing DjVu files') ;ждем закрытия окна обработки файлов
			Next
		EndIf
		ControlClick('[Class:CustomDlg]', '', '[CLASS:Button; INSTANCE:17]');clean all
	EndIf
WEnd
 
Верх