Что нового

Автоматизация консольного приложения(работа по координатам строка-столбец)

Odinn

Новичок
Сообщения
5
Репутация
0
Только начал осваивать AutoIt.
Пытаюсь автоматизировать рутинные операции в консольном(интерфейс как в TurboVision для DOS) клиенте к специфической БД.
несколько вопросов:
1) как можно узнать что операция завершена, некоторые операции выпоняются долго, как понимаю должен быть механизьм "обратной связи" для Win приложений вроде понятно, изменилось окно ожидания и т.д. а тут просто меняется надпись внутри консольного окна.
2) в некоторых местах необходимо считывать данные с окна (например имена выгружаемых файлов для дальнейшей обработки), не совсем понимаю как сделать, пока только вариант с выделением мышкой и скопировать - вставить, но может есть что-то лучше

В целом, вопросы взаимосвязаны.
В идеале если бы был некий механизьм, который позволяет взять определенные символы с консольного окна (по их координатам строка-столбец)
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
$pid=Run(@ComSpec &' /k echo 3465464646','','',0x2)
$read=''
While 1
    $read &= StdoutRead($pid)
    If @error Then ExitLoop
    Sleep(1)
WEnd
MsgBox(0,'',$read)

$str=StringRegExp($read,'\d+',1)
MsgBox(0,'',$str[0])
 
Автор
O

Odinn

Новичок
Сообщения
5
Репутация
0
Во вложении скинул скриншот интерфейса приложения.

Попробывал Пример, приложение не выдает в Stdout ничего.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Запускали через run?
Создаёт ли программа свой процесс или работает в рамках cmd?
 
Автор
O

Odinn

Новичок
Сообщения
5
Репутация
0
да, через Run, создает свой процесс(запуск специфического EXE), но его Class = ConsoleWindowClass. может что-то не понимаю.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
$pid=Run('полный путь к вашей программе','','',0x2)
$read=''
While 1
    $read &= StdoutRead($pid)
    If @error Then ExitLoop
    Sleep(1)
WEnd
MsgBox(0,'',$read)
;$read &= StdoutRead($pid,'',True);поробуйте изменить на это
 
Автор
O

Odinn

Новичок
Сообщения
5
Репутация
0
Попробывал(в общем пробывал и ранее), с флагом 0x2 программа появляется в списке процессов, но окно программы не появляется на экране.
(скрипт как-бы зависает на команде Run) если снять задачу в диспетчере задач, то появляется мессейдж бокс с текстом, и все.

Попробывал флаг 0x10002 - ничего не изменилось.

при флаге 0x10 в окне SciTE, внизу, где идут сообшения вышли данные приложения в виде текста, но MsgBox пустой. то есть скрипт сработал дальше Run но окно приложения так и не появилось.
 

sngr

AutoIT Гуру
Сообщения
1,010
Репутация
408
Код:
$pid=Run('полный путь к вашей программе','',@sw_show,0x2)
$read=''
Sleep(5000)
$read = StdoutRead($pid,True)    
MsgBox(0,'',$read)
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
Odinn
это CUI, а не простой stdout, из него без ковыряния памяти значения вытащить. я еще не видел, чтобы кто-то проделывал подобное.
 
Автор
O

Odinn

Новичок
Сообщения
5
Репутация
0
С флагом @sw_show,0x2
окно стало появлятся, но, оно не воспринимает ввод вобще, даже правая кнопока мышки на заголовке окна не работает, в Stdout выводится начальные данные загрузки, а не то что в данный момент отображено в окне.

Покопался по форуму, как понимаю можно решить задачу используя цвет пикселей + OCR для названий файлов?


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

В общем, Спасибо! думаю нашел способ который меня устроит, хотя, он кажется несколько неправильным, управление мышкой и копи-паст данных с окна.

решение было найдено тут:http://www.autoitscript.com/forum/topic/62792-generic-question-can-autoit-automate-a-dos-program/
 
Верх