C++ Builder
| Главная | Уроки | Статьи | FAQ | Форум | Downloads | Литература | Ссылки | RXLib | Диски |

 
Как управлять DOS программой, Как управлять DOS программой
ivanm
Отправлено: 04.01.2005, 15:32


Не зарегистрирован







Добрый день !
Может быть кто нибудь знает управлять DOS программой из CBuilder-а? Имею ввиду эмулировать ввод с клавиатуры для этой программы.
С уважением,
Алексей
Gedeon
Отправлено: 04.01.2005, 18:04


Ветеран

Группа: Модератор
Сообщений: 1742



По моему никак.
Konstantine
Отправлено: 05.01.2005, 10:58


Мастер участка

Группа: Модератор
Сообщений: 545



не знаю как, но ИМХО можно переназначить устройство stdio на управление извне...
Sl@Sh
Отправлено: 05.01.2005, 10:59


Мастер участка

Группа: Участник
Сообщений: 383



Есть функции, которые эмулируют нажатие клавиш. Это сработает, если ДОС программа активна (её окно активно). Это конечно догадка(сейчас сам попробую)

Успехов !
ivanm
Отправлено: 05.01.2005, 11:30


Не зарегистрирован







Спасибо, попробую сейчас поискать такие функции. Спасибо за советы и участие. С новым годом и наступающим Рождеством всех!
Георгий
Отправлено: 05.01.2005, 13:50


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



можно всё это сделать. под *NIX делал, но под BCB не получилось sad.gif вчера вечером начал пробовать и только сейчас плюнул.

для этих целей используются безимянные каналы (анонимные pipe).

в C библиотеках для запуска программы с которой ассоциирован этот канал предназначена функция popen, по при её использовании в BCB в не консольном приложении ничего, кроме сообщения об ошибках, не получил.

начал искать аналоги в WinAPI — и нашёл и функцию CreatePipe и пример её использования для запуска дочернего процесса у которого STDIN и STDOUT наши.

Пример озаглавлен "Creating a Child Process with Redirected Input and Output" и его можно найти в Index файла помощи доступного по ярлыку Borland C++Builder 6->Help->MS SDK Help Files->Win32 SDK Reference

PS. кинешь сюда рабочий пример под BCB как разберёшься?

Отредактировано Георгий — 05/01/2005, 14:56
AVC
Отправлено: 05.01.2005, 14:28


Ветеран

Группа: Модератор
Сообщений: 1583



QUOTE
Имею ввиду эмулировать ввод с клавиатуры для этой программы.

А вы посмотрели чем DOS'овская программа читает клавиатуру. (Лично мне, в свое время, приходилось делать чтения самыми разными способами — прерывания устройства / чтение буфера ОС / функции ОС ...). А то будете заниматься потоками а программа их не использует. smile.gif
Guest
Отправлено: 05.01.2005, 14:58


Не зарегистрирован







Конечно нет проблем, как предлагал Sl@Sh, сделать окно с этой самой DOS программой активным и эмулировать нажатие клавиш из windows приложения писанного на CBuilder. Это как крайнее решение. Буду искать более красивое решение. Как найду, выложу тут. Это займет наверное несколько дней. Спасибо.
Георгий
Отправлено: 06.01.2005, 01:35


Почетный железнодорожник

Группа: Модератор
Сообщений: 874



кстати — программа реально DOS или всетаки обычная консольная?
а то ведь многие DOS проги под WinNT и выше даже не запускаются.
Konstantine
Отправлено: 06.01.2005, 10:13


Мастер участка

Группа: Модератор
Сообщений: 545



QUOTE (Георгий @ 06/01/2005, 02:37)
кстати — программа реально DOS или всетаки обычная консольная?
а то ведь многие DOS проги под WinNT и выше даже не запускаются.

ну если управляться будет из проги Билдера, то чтоб запустить последнюю нужна Винда... а если при этом и должна работать и управляемая прога (ДОСовая), то значить она выполняеться в консоли ч.т.д. smile.gif

Вернуться в Вопросы программирования в C++Builder