Конференция "KOL" » Не могу найти подходящий компонент [Delphi, Windows]
 
  • Валера (24.11.08 16:51) [0]
    Мне надо компонент наподобие JVCreateProcess подскажите пожалуйста
    может быть вы встречали похожий компонент но не использующий VCL.
    Ведь он написан то практически без испольования VCL функций.

    Мне надо организовать удаленное управление командной строкой.
  • Валера (24.11.08 17:01) [1]
    JVCreateProcess - это компонент который запускает консоль  может ввести туда данные прочитать их . Обычная функция возвпащения консольная вывода не подходит.
  • Palladin © (25.11.08 08:48) [2]

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

    это какая?
  • Валера (25.11.08 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;
  • Валера (25.11.08 17:09) [4]
    Мне надо чтобы можно было во время работы динамически как бы вводить команды. И получать вывод.
  • Palladin © (26.11.08 08:07) [5]
    это не "обычная" функция, это функция написаная руками человека. "обычной" ты ее назвал, потому что где то слямзил.

    ее нужно слегка дописать, что бы получить возможность которая тебе требуется. что бы ее дописать нужно понять, что же делается внутри этой функции и досконально разобратся в используемых инструментах.
 
Конференция "KOL" » Не могу найти подходящий компонент [Delphi, Windows]
Есть новые Нет новых   [134431   +15][b:0][p:0]