Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.12.2017, 13:57   #1
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию Launcher для консольных программ

привет, задача запускать консольное приложение и отображать то что оно выводит, при этом cmd окно не показывать а весь текст класть в memo, я пробовал PipeConsole использовать, с некоторыми консолями работает, а с некоторыми нет, с теми с которыми не работает он их запускает и передает параметры, но что в самой консоли, что в memo ничего не пишет. может кто знает как это починить?
PTyTb32 вне форума Ответить с цитированием
Старый 10.12.2017, 14:02   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

https://msdn.microsoft.com/en-us/lib...(v=vs.85).aspx
p51x вне форума Ответить с цитированием
Старый 10.12.2017, 14:04   #3
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
да - да, видел, PipeConsole так и работает, попробую партировать..
P.S. ну да, партировал, с разбегу.. С++ лишь в общих чертах представляю..

Последний раз редактировалось PTyTb32; 10.12.2017 в 14:07.
PTyTb32 вне форума Ответить с цитированием
Старый 10.12.2017, 14:14   #4
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

А там от плюсов только синтаксис, а так винапи, который и в delphi винапи.
p51x вне форума Ответить с цитированием
Старый 10.12.2017, 14:42   #5
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
А там от плюсов только синтаксис, а так винапи, который и в delphi винапи.
а в
Код:
TEXT("%s failed with error %d: %s"),
TEXT это что?
PTyTb32 вне форума Ответить с цитированием
Старый 10.12.2017, 14:47   #6
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Макрос, который определяет широкую строку (в новых Delphi они такие сразу, а в старых WideString кажись). Апи то юникодовское.
p51x вне форума Ответить с цитированием
Старый 10.12.2017, 14:51   #7
Alex11223
Старожил
 
Аватар для Alex11223
 
Регистрация: 12.01.2011
Сообщений: 19,500
По умолчанию

Древний макрос создающий "юникодовскую" (wchar_t*) или не юникодовскую (char*) строку в зависимости от наличия дефайна об этом.

В API есть *W функции принимающие юникод строки и *A не юникод.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом.

Последний раз редактировалось Alex11223; 10.12.2017 в 14:53.
Alex11223 вне форума Ответить с цитированием
Старый 10.12.2017, 15:02   #8
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
WideString
Код:
szCmdline:=WideString ('child');
ошибка
[dcc32 Error] Unit1.pas(41): E2010 Incompatible types: 'Char' and 'WideString'

Код:
szCmdline:=char('child');
ошибка
[dcc32 Error] Unit1.pas(41): E2089 Invalid typecast
PTyTb32 вне форума Ответить с цитированием
Старый 10.12.2017, 15:07   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Как объявлена szCmdline?
p51x вне форума Ответить с цитированием
Старый 10.12.2017, 15:13   #10
PTyTb32
Форумчанин
 
Регистрация: 06.10.2013
Сообщений: 216
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Как объявлена szCmdline?
Код:
 szCmdline:CHAR;

вот все что я пока партировал

Код:
unit Unit1;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants,
  System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;

type
  Tqq = class(TForm)
    Memo1: TMemo;
    Button1: TButton;
    procedure CreateChildProcess();

  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  qq: Tqq;
  g_hChildStd_IN_Rd: HWND = 0;
  g_hChildStd_IN_Wr: HWND = 0;
  g_hChildStd_OUT_Rd: HWND = 0;
  g_hChildStd_OUT_Wr: HWND = 0;

  g_hInputFile: HWND = 0;

implementation

{$R *.dfm}

procedure Tqq.CreateChildProcess();
var
  szCmdline: CHAR;
  piProcInfo: PROCESS_INFORMATION;
  siStartInfo: STARTUPINFO;
  bSuccess: boolean;
Begin
  bSuccess := false;
  szCmdline := 'child';
  ZeroMemory(piProcInfo, sizeof(PROCESS_INFORMATION));

  ZeroMemory(&siStartInfo, sizeof(STARTUPINFO));
  siStartInfo.cb := sizeof(STARTUPINFO);
  siStartInfo.hStdError := g_hChildStd_OUT_Wr;
  siStartInfo.hStdOutput := g_hChildStd_OUT_Wr;
  siStartInfo.hStdInput := g_hChildStd_IN_Rd;
  siStartInfo.dwFlags := STARTF_USESTDHANDLES;

  // Create the child process.

  bSuccess := CreateProcess(nil, szCmdline, // command line
    nil, // process security attributes
    nil, // primary thread security attributes
    TRUE, // handles are inherited
    0, // creation flags
    nil, // use parent's environment
    nil, // use parent's current directory
    siStartInfo, // STARTUPINFO pointer
    piProcInfo); // receives PROCESS_INFORMATION

  // If an error occurs, exit the application.
  // if  not bSuccess then
  // ErrorExit(TEXT('CreateProcess'))
  // else
  // Begin
  // Close handles to the child process and its primary thread.
  // Some applications might keep these handles to monitor the status
  // of the child process, for example.

  CloseHandle(piProcInfo.hProcess);
  CloseHandle(piProcInfo.hThread);
  // end;
end;

end.
основная проблема в том что я абсолютно не понимаю что делает какая строка и просто адаптирую синтаксис

Последний раз редактировалось PTyTb32; 10.12.2017 в 15:15.
PTyTb32 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удобная среда для разработки консольных приложений на языке Pascal Krasiosoft Паскаль, Turbo Pascal, PascalABC.NET 36 19.07.2015 16:25
Функции ввода для консольных устройств atenon Общие вопросы C/C++ 1 02.02.2012 20:25
Компиляция консольных программ в C# Mixim Общие вопросы .NET 3 15.07.2010 17:31
Вывод консольных программ dcLout Общие вопросы C/C++ 2 14.10.2009 14:26