Имя: Пароль:
IT
Админ
Как записать в текстовый файл вывод для окна консольного приложения FoxPro/Clipper/DOS
0 Вуглускр1991
 
20.11.19
12:11
Привет!

Кто знает такие программы?
На самом деле нужно больше: нужен эмулятор экрана и клавиатуры для запуска скриптов и чтения с экрана получившихся отчетов.
1 Asmody
 
20.11.19
12:25
AutoIt умеет
2 ДенисЧ
 
20.11.19
12:26
(1) в дос-окне?
3 Вуглускр1991
 
20.11.19
12:28
(2) Бог с ним с DOS-ом, программа от Conhost.exe терминалом запитывается.
4 Пёс да лис
 
20.11.19
17:25
(0) А дос-окно запускается черед DOS-Box? Или как? Можно простенькую резедентрую прогу написать, которая буфер экрана скидывает в файл при определенных условиях.
5 Вуглускр1991
 
20.11.19
17:31
(4) Программа открывается в винде, писали её ребята из IBM, там оказывается уже все сделано в клиентском приложении, чтобы макросы из команд лепить и экраны сохранять. Такая опция в меню "Copy Append" первый раз увидел - добавляет выделенный фрагмент к буферу обмена.
6 Сияющий в темноте
 
20.11.19
18:48
В досе
< ввод из файла
> вывод в файл
2> вывод в файл потока ошибок.
7 Вуглускр1991
 
20.11.19
20:31
(6) Представь себе, что это Нортон командер, который выводит байты в видеопамять видеоадаптера, которая отображена в оперативную память по адресу B8000h.
Там нужен именно граббер экрана с протоколом фиксации изменений, а вот уже изменения можно лить в поток.
Но даже если это не DOS (а это слава богу не ДОС), в винде текстовое окно - библиотека, вывод по адресам окна разным цветом разным шрифтом - это все равно библиотека. Может быть в составе WinCRT, может быть написана IBM отдельно, там парни не хуже чем в MS пишут проги.
Поток ввода, поток вывода и поток ошибок это тоже библиотека, но вот может ли она оперировать абстракциями типа "ПолеВвода" и "ТабличноеПоле" нарисованными в текстовой консоли? Я так думаю, что нет.
8 Garykom
 
гуру
20.11.19
20:49
(7) Для консольной проги не проблема переназначить стандартный ввод и вывод а далее перехватывать его и обрабатывать как нуна.
Я такое делаю на Golang примерно вот так

cmd := exec.Command(apps, args...)
cmd.SysProcAttr = &syscall.SysProcAttr{HideWindow: true}
out, err := cmd.Output()
if err != nil {
    Log.Println(err)
}
Log.Println(string(convert(41, out)))

Тут у меня запуск консольной проги, чтение из ее стандартного вывода с записью в логи

https://golang.org/pkg/os/exec/
https://golang.org/src/os/exec/example_test.go
9 Пёс да лис
 
20.11.19
22:21
(7) Чувак просто пытался похвастаться своими глубокими знаниями, а не ответить по теме.
10 Вуглускр1991
 
21.11.19
10:36
(9) Ты не прав, я лишь высказываю неуверенность в том, что вывод программы в данном случае может быть представлен стандартным потоком.
Для примера, проведи эксперимент, запиши поток стандартного вывода Far managera в файл и попробуй понять в какой момент пользователь перекинул курсор слева направо и вошел в каталог.