Модераторы: Snowy, bartram, MetalFan, bems, Poseidon, Riply

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Работа с окном cmd, Точнее ввод и чтение строк 
:(
    Опции темы
ИгнатьевАлексей
Дата 12.3.2006, 19:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: нет
Всего: 3



Господа! Не могу найти верный путь! Помогите, пожалуйста!


Надо вводить команду в окно cmd, а потом прочесть то, что оно возвращает! С первой проблемой я худо-бедно справился через иммитацию нажатия клавишь, а вот с чтением дело плохо! smile

Специалисты VB отправили меня на изучение API-функций. Но я так и не нашел таких процедур.

Подскажите, какие API-функции использовать, или куда бежать! smile


Заранее благодарен!



--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
_hunter
Дата 13.3.2006, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98





--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
ИгнатьевАлексей
Дата 13.3.2006, 21:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: нет
Всего: 3



Спасибо!

Только я так и не понял кикие функции Win32API надо использовать?
GetDOSEnvironment-это самое похожее, что я нашел. Ведь я этого кода не понимаю smile



--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
Yanis
Дата 14.3.2006, 11:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111



Цитата(ИгнатьевАлексей @ 12.3.2006, 19:09 Найти цитируемый пост)
Специалисты VB

smile

Цитата(ИгнатьевАлексей @ 12.3.2006, 19:09 Найти цитируемый пост)
Надо вводить команду в окно cmd, а потом прочесть то, что оно возвращает! С первой проблемой я худо-бедно справился через иммитацию нажатия клавишь, а вот с чтением дело плохо!

А что за программа? Может твою проблему можно решить путём вывода её результата в файл!? Как это сделать можешь посмотреть здесь ссылка.


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
ИгнатьевАлексей
Дата 14.3.2006, 20:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: нет
Всего: 3



Спасибо за предложение!

Правда планируется непрерывный ввод и чтение команд и результатов, но извернуться можно!
Ну а вообще, это программка служебная, черт ее знает как она работает, но только через нее мне доступны необходимые данные!
Она выглядит как обыкновенное DOS-овское окно и имеет свои команды. С другого компа сетевого до нее можно достучаться через TELNET.
Этот способ переадресации в файл
cmd /C ping 127.0.0.1 > E:\ping127_0_0_1.inf
Он чисто DOS-овский, наверное, навряд-ли он там подойдет, или он в данном случае универсальный??? Я просто не разбираюсь особо smile
Завтра попробую на работе!


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
Демо
Дата 14.3.2006, 23:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 6
Всего: 50



Код

function GetDosOutput( const CommandLine, WorkDir: String;
                      var ResultCode: Cardinal ): String;
var StdOutPipeRead, StdOutPipeWrite: THandle;
   SA                             : TSecurityAttributes;
   SI                             : TStartupInfo;
   PI                             : TProcessInformation;
   WasOK                          : Boolean;
   Buffer                         : array[0..255] of Char;
   BytesRead                      : Cardinal;
   Line                           : String;
Begin
   Application.ProcessMessages;
   With SA do
   Begin
      nLength := SizeOf( SA );
      bInheritHandle := True;
      lpSecurityDescriptor := nil;
   end;
   // создаём пайп для перенаправления стандартного вывода
   CreatePipe( StdOutPipeRead,  // дескриптор чтения
               StdOutPipeWrite, // дескриптор записи
               @SA,              // аттрибуты безопасности
               0                // количество байт принятых для пайпа - 0 по умолчанию
              );
   try
    // Создаём дочерний процесс, используя StdOutPipeWrite в качестве стандартного вывода,
    // а так же проверяем, чтобы он не показывался на экране.
    with SI do
    Begin
       FillChar( SI, SizeOf( SI ), 0 );
       cb := SizeOf( SI );
       dwFlags := STARTF_USESHOWWINDOW or STARTF_USESTDHANDLES;
       wShowWindow := SW_HIDE; //не показывать окно
       hStdInput := GetStdHandle( STD_INPUT_HANDLE ); // стандартный ввод не перенаправляем
       hStdOutput := StdOutPipeWrite;
       hStdError := StdOutPipeWrite;
    end;

    // Запускаем компилятор из командной строки
    //WorkDir := ExtractFilePath(CommandLine);
    WasOK := CreateProcess( nil,
                            PChar( CommandLine ),
                            nil,
                            nil,
                            True,
                            0,
                            nil,
                            PChar( WorkDir ),
                            SI,
                            PI );
    // Теперь, когда дескриптор получен, для безопасности закрываем запись.
    // Нам не нужно, чтобы произошло случайное чтение или запись.
    CloseHandle( StdOutPipeWrite );
    // если процесс может быть создан, то дескриптор, это его вывод
    if not WasOK then
     raise Exception.Create( 'Ошибка выполнения или компиляции: ' +
            Chr( 10 ) + Chr( 13 ) + CommandLine )
    else
      try
        // получаем весь вывод до тех пор, пока DOS-приложение не будет завершено
        Line := '';
        Repeat
           // читаем блок символов (могут содержать возвраты каретки и переводы строки)
           WasOK := ReadFile( StdOutPipeRead, Buffer, 255, BytesRead, nil );
           // есть ли что-нибудь ещё для чтения?
           if BytesRead > 0 then
           Begin
              // завершаем буфер PChar-ом
              Buffer[BytesRead] := #0;
              // добавляем буфер в общий вывод
              Line := Line + Buffer;
           end;
           Application.ProcessMessages;
        Until not WasOK or ( BytesRead = 0 );
        // ждём, пока завершится консольное приложение
        WaitForSingleObject( PI.hProcess, INFINITE );
        ResultCode := 0;
        GetExitCodeProcess( PI.hProcess, ResultCode );
      finally
        // Закрываем все оставшиеся дескрипторы
        CloseHandle( PI.hThread );
        CloseHandle( PI.hProcess );
      end;
   finally
     Result := Line;
     CloseHandle( StdOutPipeRead );
 end;
end;


© xShadow


--------------------
    
PM MAIL ICQ Skype   Вверх
ИгнатьевАлексей
Дата 15.3.2006, 08:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: нет
Всего: 3



Господа!
Извините за тупость! smile

В вышеуказанном семпле GetDosOutput - это API-функция, или нет? Что-то мне не найти ее! HELP!!!


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
_hunter
Дата 15.3.2006, 11:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 8564
Регистрация: 24.6.2003
Где: Europe::Ukraine:: Kiev

Репутация: 9
Всего: 98



эээ... а то, что за вышеуказанной функцией идет ее реализация, тебе ни о чем не говорит?


--------------------
Tempora mutantur, et nos mutamur in illis...
PM ICQ   Вверх
Girder
Дата 15.3.2006, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Лентяй 2
***


Профиль
Группа: Участник Клуба
Сообщений: 1993
Регистрация: 12.5.2004

Репутация: 25
Всего: 155





--------------------
Как слышим, так и пишим.
Истина где-то там...
PM   Вверх
ИгнатьевАлексей
Дата 15.3.2006, 21:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: нет
Всего: 3



Огромное спасибо!

Но дела в том, что я пытаюсь работать в VB с помощью API.
Неужели я могу использовать эту функцию из VB подобно API-функции?
Если да, то как? smile

Простите за полнейшую неосведомленность!!!


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
bems
Дата 15.3.2006, 21:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Нужно перевести на ВБ smile


--------------------
Обижено школьников: 8
PM MAIL   Вверх
Yanis
Дата 16.3.2006, 11:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Участник Клуба
Сообщений: 2937
Регистрация: 9.2.2004
Где: Москва

Репутация: 13
Всего: 111



Цитата(ИгнатьевАлексей @ 15.3.2006, 21:38 Найти цитируемый пост)
Но дела в том, что я пытаюсь работать в VB с помощью API.
Вообще то у VB небольшие проблемы с WinAPI.

Цитата(ИгнатьевАлексей @ 15.3.2006, 21:38 Найти цитируемый пост)
Неужели я могу использовать эту функцию из VB подобно API-функции?
Наверное сильно извратившись и можно заставить её работать в VB, но путём наращивания большого гемороя smile

Цитата(_hunter @ 15.3.2006, 11:52 Найти цитируемый пост)
эээ... а то, что за вышеуказанной функцией идет ее реализация, тебе ни о чем не говорит?

smile


--------------------
user posted image *щёлк*
PM MAIL WWW ICQ   Вверх
Демо
Дата 16.3.2006, 11:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1278
Регистрация: 3.11.2005

Репутация: 6
Всего: 50



Цитата(bems @ 15.3.2006, 21:57 Найти цитируемый пост)
Нужно перевести на ВБ


А может просто использовать DLL в VB?
А в DLL завернуть интерфес работы с консолью.


--------------------
    
PM MAIL ICQ Skype   Вверх
bems
Дата 16.3.2006, 14:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 3400
Регистрация: 5.1.2006

Репутация: 21
Всего: 88



Я бы так не стал делать - не хочется лиший модуль только для этого. Но если парень пишет на ВБ - че там уже стесняться? smile


--------------------
Обижено школьников: 8
PM MAIL   Вверх
ИгнатьевАлексей
Дата 17.3.2006, 15:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 369
Регистрация: 18.11.2005

Репутация: нет
Всего: 3



Друзья!
Я в замешательстве!
smile
Мз мира VB по этому вопросу послали к API. "Изучай их, мол, парень! Применишь в VB и будешь счастлив!"
Пришел я на форум API, а функций то таких толком и нет, чтобы в моем случае применить?!
Или я по-неопытности все неправильно понимаю?
Или я с форумом ошибся?
Что же мне делать? Переходить на др. язык из-за одной задачи? smile


--------------------
Vingrad - FOREVER !!! 

"Как вы яхту назовете - так она и поплывет!" 
 Капитан Врунгель 
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Delphi: WinAPI и системное программирование"
Snowybartram
MetalFanbems
PoseidonRrader
Riply

Запрещено:

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Литературу по Delphi обсуждаем здесь
  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь
  • 90% ответов на свои вопросы можно найти в DRKB (Delphi Russian Knowledge Base) - крупнейшем в рунете сборнике материалов по Дельфи
  • 99% ответов по WinAPI можно найти в MSDN Library, оставшиеся 1% здесь

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, bartram, MetalFan, bems, Poseidon, Rrader, Riply.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Delphi: WinAPI и системное программирование | Следующая тема »


 




[ Время генерации скрипта: 0.1043 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.