[WinXP/dos] Как лучше запрограммировать управление дос-приложением?
А что именно ты понимаешь под взаимодействием?
cmd.exe это не досовское, а консольное приложениеНо ведь под ХР досовские приложения запускаются именно под cmd. Или не обязательно?
что именно ты понимаешь под взаимодействием?Передача клавиатурных команд и считывание выводимой на экран информации.
Но это не обычное консольное приложение - это оконное текстовое приложение - попытка перенаправления ввода и вывода с помощью < и > здесь не работает.
Предупреждал бы, что кросспостишь.
Есть разнообразные winApi функции для работы с консолью. Правда, есть определённые проблемы с вызовом их для стороннего приложения - нужно запускать его под дебагом или длл-инжекшен делать, насколько я помню.
Сделай вот что: залезь на офсайт FAR commander, тыкнись в плагины и найди там софтину, которая вообще-то не является плагином конкретно к фару, а позволяет запускать в одном консольном окошке несколько виртуальных консолей (и, соответственно, приложений чтобы потом переключаться между ними как в никсах. Названия не помню и самому искать влом.
Так вот, у этой софтины есть сурцы на С++, довольно хорошо написанные, не очень большие и крайне познавательные - там и длл-инжекшен, и перехват апи-вызовов, и то, что тебе нужно - программный доступ к консоли чужого приложения.
Есть ещё вариант с DosBox и Mem[$B800:XXXX]
![](/images/graemlins/frown.gif)
То есть если просто написать приложение, которое будет запускать это dos-овское exec-ом, то управлять этим досовским неполучится?
Спасибо, поищу, посмотрю
![](/images/graemlins/smile.gif)
Mem[$B800:XXXX]
Это относится к DosBox-у? Или это независимо?
Опять же этот диапазон адресов - это вроде бы графическая память. Или в текстовом режиме тоже там хранится?
позволяет запускать в одном консольном окошке несколько виртуальных консолей
Ты про это ?
Multi-panel
Модуль позволяет открывать более чем две файловые панели.
Вот еще.
Если да, исходников для него я найти пока не смог
![](/images/graemlins/frown.gif)
К досбоксу это относится
то, про что тебе написали - это conman
соответственно:
in - это ввод, out - вывод, err- вывод ошибок.
по умолчанию, in - это клавиатура, out и err - экран.
все эти три файловые дескриптора можно переопределить, и напрямую работать с приложением.
На уровне консоли это можно сделать?
если просто переопределить вывод Far'а, он не будет работать
У меня не получилось перенаправлять ввод и вывод посредством <,>,<<,>>.
Что-то поиск conman-а на сайте Фара ничего не дал
![](/images/graemlins/frown.gif)
Вообще удалось найти только версию под никс.
Мб у кого есть под вин?
![](/images/graemlins/smile.gif)
dos-овское или консольное приложение при старте берет три файловых дескриптора: in, out, err.А казалось бы взрослый, неглупый даже человек...
соответственно:
in - это ввод, out - вывод, err- вывод ошибок.
по умолчанию, in - это клавиатура, out и err - экран.
все эти три файловые дескриптора можно переопределить, и напрямую работать с приложением.
снаружи,
передать другие файловые дескрипторы (например, pipe-ы)
> На уровне консоли это можно сделать?
не понял, что значит "на уровне консоли".
ты задачу какую вообще хочешь решить?
извини, не заметил, когда отвечал.
для псевдооконных dos/console-приложений, как правильно заметил _fj, необходимо будет делать dll-injection и перехватывать winapi-вызовы.
А то в документации к DosBox здесь написано лишь про то, что mem позволяет посмотреть объем памяти, но никак не содержимое
![](/images/graemlins/frown.gif)
![](/images/graemlins/blush.gif)
Кстати, под вендой постоянно сталкиваюсь с тем, что некоторые консольные приложения (из разряда всяких там ping, ipconfig, bcdedit - сейчас точно не помню, что именно не работает) без всякого псевдооконного интерфейса выводят текст напрямую в консоль (т.е., например, qwerty.exe/a /b |more всё равно выдаёт на экран всё сразу)
Память надо просматривать из своей программы, написанной на _любом_ языке, который только может компиляться под DOS.
Какая роль Досбокса в этом? Почему недостаточно в cmd запустить?
самому, кстати, было бы интересно такое реализовать, ибо conman в моей 64-битной венде не работает как надо
![](/images/graemlins/frown.gif)
без всякого псевдооконного интерфейса выводят текст напрямую в консоль (т.е., например, qwerty.exe/a /b |more всё равно выдаёт на экран всё сразу)
Открой для себя stderr.
Что-то у меня оень сильные сомнения, что программисты из МС, какими бы ужасными они не были, стали выдавать инфу, предназначенную пользователю, в stderr.
слать /? в stderr - стандартная достаточно практика.
![](/images/graemlins/blush.gif)
---
...Я работаю антинаучным аферистом...
Слать вывод "route print *" в stderr - тоже стандартная практика?гонишь, под 2к3 вывод перенаправляется так:
route print >out
а не так:
route print 2>out
Да мне плевать на все эти заумные рассуждения, я вижу, что route print * занимает больше одного экрана, запускаю route print * |more - и хуй.
IPv4 таблица маршрута
===========================================================================
Список интерфейсов
0x1 ...........................
0x2 ...0 ......
0x10004 .........
0x110005 ... ......
0x1c0006 ... ......
===========================================================================
===========================================================================
Активные маршруты:
Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
<cut>
-- More --
Оставить комментарий
durka82
Какие средства есть под виндами для взаимодействия с дос-приложениями?Насколько я понимаю, в первую очередь нужно взаимодействовать с cmd.exe.
Как это лучше сделать (есть ли у cmd сервер автоматизации, например?)?