Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "KOL";
Текущий архив: 2011.01.09;
Скачать: [xml.tar.bz2];

Вниз

Не могу найти подходящий компонент   Найти похожие ветки 

 
Валера   (2008-11-24 16:51) [0]

Мне надо компонент наподобие JVCreateProcess подскажите пожалуйста
может быть вы встречали похожий компонент но не использующий VCL.
Ведь он написан то практически без испольования VCL функций.

Мне надо организовать удаленное управление командной строкой.


 
Валера   (2008-11-24 17:01) [1]

JVCreateProcess - это компонент который запускает консоль  может ввести туда данные прочитать их . Обычная функция возвпащения консольная вывода не подходит.


 
Palladin ©   (2008-11-25 08:48) [2]


>  Обычная функция

это какая?


 
Валера   (2008-11-25 17:08) [3]

Такая

function GetDosOutput(const CommandLine:string): string;

var

SA: TSecurityAttributes;

SI: TStartupInfo;

PI: TProcessInformation;

StdOutPipeRead, StdOutPipeWrite: THandle;

WasOK: Boolean;

Buffer: array[0..255] of Char;

BytesRead: Cardinal;

WorkDir, 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("Could not execute command line!")

  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;

      until not WasOK or (BytesRead = 0);

      // ждём, пока завершится консольное приложение

      WaitForSingleObject(PI.hProcess, INFINITE);

    finally

      // Закрываем все оставшиеся дескрипторы

      CloseHandle(PI.hThread);

      CloseHandle(PI.hProcess);

    end;

finally

    result:=Line;

    CloseHandle(StdOutPipeRead);

end;

end;


 
Валера   (2008-11-25 17:09) [4]

Мне надо чтобы можно было во время работы динамически как бы вводить команды. И получать вывод.


 
Palladin ©   (2008-11-26 08:07) [5]

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

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



Страницы: 1 вся ветка

Форум: "KOL";
Текущий архив: 2011.01.09;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.47 MB
Время: 0.004 c
3-1250675499
salexn
2009-08-19 13:51
2011.01.09
DCOMConnection и проверка его существования


2-1286783963
Dennis I. Komarov
2010-10-11 11:59
2011.01.09
ReadDirectoryChangesW


15-1285360161
Юрий
2010-09-25 00:29
2011.01.09
С днем рождения ! 25 сентября 2010 суббота


4-1243760418
Nikfel
2009-05-31 13:00
2011.01.09
Как загрузить файл .res и из него брать ресурсы


3-1251053802
Maks Zyuzin
2009-08-23 22:56
2011.01.09
IBDataSet и сбрасывание значений параметров





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский