Форум программистов, компьютерный форум, киберфорум
Delphi: WinAPI
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/8: Рейтинг темы: голосов - 8, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 15.09.2015
Сообщений: 14

Получение данных из консольного приложения

16.09.2015, 18:49. Показов 1621. Ответов 2
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте форумчане! Пожалуйста, подскажите . У меня такой вопрос. Я скачал примерчик из Консольный редирект в обе стороны и приспособил к себе (Данная тема была в разделе С++, почему-то, хотя делфийский код). У меня создается процесс, запускается Plink с параметрами перенаправления и ждет окончания процесса. Так вот, я внутри plink запускаю ping, телнет с командами. Вопрос: как программно отловить момент окончания вывода результата ping и(или) телнет. Здесь кусок исходного кода где создается процесс:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
    if CreateProcess(nil, PChar(sBufferOut), nil,nil, true, 0, nil,
        Pointer(sWorkDir), sui, pi) then
    begin  // При успешном создании идем дальше
      hProcess := pi.hProcess;
      CloseHandle(hWriteOut);
      CloseHandle(hReadIn);
 
      self.ReturnValue := RT_ERR_OK;
      SetLength(sBufferOut,l_BUFFER_SIZE+1);
      b1 := true;
      // ========= внутри ждем команды =============================
      while not self.Terminated do
      begin
        FillChar(sBufferOut[1],l_BUFFER_SIZE+1,0);
        if b1 then
        begin
          b1 := ReadFile(hReadOut, sBufferOut[1], l_BUFFER_SIZE, bReadOut, nil);
        end;
        if b1 then
        begin
          if Assigned(zOnOutput) then
            zOnOutput(self, Copy(sBufferOut,1,bReadOut));
        end;
        if (not b1) then
          break;
      end;
      // ======================================
      if not GetExitCodeProcess(pi.hProcess, Cardinal(lExitCodeProcess)) then
         lExitCodeProcess := -1;
      CloseHandle(pi.hThread);
      CloseHandle(pi.hProcess);
    end
    else
    begin
      self.ReturnValue := RT_ERR_START;
      CloseHandle(hWriteOut);
      CloseHandle(hReadIn);
    end;
а здесь где я посылаю телнет команду:
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
  if zRedirect<>nil then
  begin
  //=============================
    s := edTelnet+Edit_IP.Text+#13#10;  // здесь подключаюсь по айпи
    if rgCharset.ItemIndex=1 then
      CharToOem(@s[1],@s[1]);
    zRedirect.WriteData(s);
    edInput := '';
    sleep(3000);
  //=============================
    s := 'LOGIN'+#13#10;             
    if rgCharset.ItemIndex=1 then
        CharToOem(@s[1],@s[1]);
      zRedirect.WriteData(s);
      edInput := '';
      sleep(2000);
  //=============================
    s := 'PASSWORD'+#13#10;
    if rgCharset.ItemIndex=1 then
        CharToOem(@s[1],@s[1]);
      zRedirect.WriteData(s);
      edInput := '';
  //=============================
  end;
Вот. Как мне теперь программно узнать момент вывода приглашения после 'PASSWORD'. Хочу предупредить что, я с WINAPI пока еще не "на ТЫ". Заранее благодарен ответившим!
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
16.09.2015, 18:49
Ответы с готовыми решениями:

Запуск консольного приложения из другого приложения
Я понимаю, что мой вопрос уже разжеван. Однако точного ответа я пока на него не нашел. У меня есть некоторое приложение. Я хочу по...

Перехват вывода консольного приложения
Если попал не туда, извиняйте и перенаправьте куда надо... Всем привет, проблема в следующем: пытаюсь сделать перехват вывода консольного...

Запуск консольного приложения из формы
Есть написанное консольное приложение {$APPTYPE CONSOLE} Вопрос в том как из обычной формы по нажатию кнопки запустить консольное? так же...

2
Модератор
 Аватар для FIL
3492 / 2614 / 742
Регистрация: 19.09.2012
Сообщений: 7,977
16.09.2015, 19:02
Ты же получаешь в программе консольный вывод.
Анализируй его и реагируй нужным тебе образом.
1
1 / 1 / 0
Регистрация: 15.09.2015
Сообщений: 14
16.09.2015, 19:19  [ТС]
Да, я получаю вывод в мемо. Но как узнать что, вышел приглашение после 'PASSWORD'. Парсит мемо? После приглашение мне нужно отправить следующую команду. (Sleep не хочу).

Добавлено через 9 минут
Анализировать конечно можно. Но думал, что есть идея получше.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
16.09.2015, 19:19
Помогаю со студенческими работами здесь

Запуск консольного приложения и результат его выполнения
Приветствую всех. Столкнулся со следующей проблемой. Есть консольное приложение, выполняется через командную строку, возвращает текст....

Нет связи консольного приложения с событиям динамических компонентов
Люди как связать событие с компонентом ? program Project1; {$APPTYPE CONSOLE} {$R *.res} uses Winapi.Windows,...

Возможно ли скрыть окно консольного приложения при его выполнении?
Запускается консольное приложение (время отработки где то 2-3 сек). запускается из программы на delphi командой ShellExecute. Мне...

Получение параметров для консольного приложения
есть задание, Input s n NAME p nr cost r

Получение параметров при запуске консольного приложения
Допустим, есть некоторый test.exe int _tmain(int argc, _TCHAR* argv) { setlocale(LC_ALL, &quot;Russian&quot;); for (int i = 0; i &lt;...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
делаю науч статью по влиянию грибов на сукцессию
anaschu 13.03.2026
прикрепляю статью
SDL3 для Desktop (MinGW): Создаём пустое окно с нуля для 2D-графики на SDL3, Си и C++
8Observer8 10.03.2026
Содержание блога Финальные проекты на Си и на C++: hello-sdl3-c. zip hello-sdl3-cpp. zip Результат:
Установка CMake и MinGW 13.1 для сборки С и C++ приложений из консоли и из Qt Creator в EXE
8Observer8 10.03.2026
Содержание блога MinGW - это коллекция инструментов для сборки приложений в EXE. CMake - это система сборки приложений. Здесь описаны базовые шаги для старта программирования с помощью CMake и. . .
Как дизайн сайта влияет на конверсию: 7 решений, которые реально повышают заявки
Neotwalker 08.03.2026
Многие до сих пор воспринимают дизайн сайта как “красивую оболочку”. На практике всё иначе: дизайн напрямую влияет на то, оставит человек заявку или уйдёт через несколько секунд. Даже если у вас. . .
Модульная разработка через nuget packages
DevAlt 07.03.2026
Сложившийся в . Net-среде способ разработки чаще всего предполагает монорепозиторий в котором находятся все исходники. При создании нового решения, мы просто добавляем нужные проекты и имеем. . .
Модульный подход на примере F#
DevAlt 06.03.2026
В блоге дяди Боба наткнулся на такое определение: В этой книге («Подход, основанный на вариантах использования») Ивар утверждает, что архитектура программного обеспечения — это структуры,. . .
Управление камерой с помощью скрипта OrbitControls.js на Three.js: Вращение, зум и панорамирование
8Observer8 05.03.2026
Содержание блога Финальная демка в браузере работает на Desktop и мобильных браузерах. Итоговый код: orbit-controls-threejs-js. zip. Сканируйте QR-код на мобильном. Вращайте камеру одним пальцем,. . .
SDL3 для Web (WebAssembly): Синхронизация спрайтов SDL3 и тел Box2D
8Observer8 04.03.2026
Содержание блога Финальная демка в браузере. Итоговый код: finish-sync-physics-sprites-sdl3-c. zip На первой гифке отладочные линии отключены, а на второй включены:. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru