Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Delphi Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
 Re: CreateProcess-аналог AllocConsole  [new]
SOFT FOR YOU
Member [заблокирован]

Откуда:
Сообщений: 2761
чччД__,

В контексте своего рабочего места. Когда херачит код. Один херачит и смотрит, правильно ли оно работает. Второй получает сборку и тоже проверяет, правильно ли оно работает. :)
5 июн 18, 15:29    [21470029]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 28840

окна...
всюду окна.
и в голове.

Posted via ActualForum NNTP Server 1.5

5 июн 18, 15:35    [21470053]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
чччД__
Guest
Что-то ты не очень представляешь, что есть служба виндовс.
5 июн 18, 15:35    [21470054]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
SOFT FOR YOU
Member [заблокирован]

Откуда:
Сообщений: 2761
чччД__,

Это ты не представляешь, что приложение может запускаться не только как сервис, но и в stand-alone режиме. Например, для отладки
5 июн 18, 15:37    [21470066]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
чччД__
Guest
Ну так что ты тогда про сервисы талдычишь.
5 июн 18, 15:39    [21470074]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
SOFT FOR YOU
Member [заблокирован]

Откуда:
Сообщений: 2761
чччД__,

По мне - это оптимальное название. Сервер или серверное приложение - не але. Служба - тем более. А сервис вроде как понятен. Не обязан быть ни сервером, ни службой. Но может быть как тем, так и этим
5 июн 18, 15:49    [21470124]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
чччД__
Guest
Вообще, дичь полная.
Ну ладно, запуск "как приложения" для отладки, пусть с консолью.
Ну, сбилди отладочном приложение с флагом "консольное", вот тебе и консоль, что за бред с позиционированием окна...
И все равно, "как сервис" рано или поздно придется запускать - там уже гарантированно не будет ошибок, что ли? Так и будешь прыг-скок...
Напиши простейшего клиента для работы с сервисом, это же и просто и удобно, хоть локально сервис отлаживай, хоть удаленно, да и управлять/настраивать удобно.
5 июн 18, 15:53    [21470144]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 28840

05.06.2018 15:49, SOFT FOR YOU пишет:
> Сервер или серверное приложение - не але. Служба - тем более. А сервис вроде как понятен. Не обязан быть ни сервером, ни службой. Но может быть как тем, так и этим

о! второе пришествие Дэйва Катлера...

Posted via ActualForum NNTP Server 1.5

5 июн 18, 15:53    [21470148]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
SOFT FOR YOU
Member [заблокирован]

Откуда:
Сообщений: 2761
чччД__,

Делает одно приложение. Которое знает, сервис ли оно или stand-alone. И работает соответственно. В Debug или Release сборке
5 июн 18, 16:16    [21470296]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45047

SOFT FOR YOU
Которое знает, сервис ли оно или stand-alone.

Когда твои тестеры задолбаются читать бегущую консоль, они тебя начнут бить пока ты не
сделаешь-таки вывод лога в файл, который удобно читать, грепать и отсылать по почтк. Так
что ты сэкономишь себе время, занявшись этим уже сейчас.

Posted via ActualForum NNTP Server 1.5

5 июн 18, 16:22    [21470332]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45047

А уж какие забавные вещи позволяет творить имя файла лога типа \\.\pipe\MySuperLog -
вообще ни словами описать, ни в сказке рассказать.

Posted via ActualForum NNTP Server 1.5

5 июн 18, 16:34    [21470421]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
SOFT FOR YOU
Member [заблокирован]

Откуда:
Сообщений: 2761
Dimitry Sibiryakov,

Я работаю в конторе, где 100+ сотрудников, и добрая половина из них программисты. Контора многие годы занимается тем, что разрабатывает промышленные сервера для линукс. И здесь используется как раз такая система, что пишутся логи и данные в терминал, в зависимости от уровня логирования. Поэтому будь добр, не рассказывай мне о том, что задолбаются делать тестеры.
5 июн 18, 16:41    [21470450]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
Мимопроходящий
Member

Откуда: бурятский тундрюк, эсквайр
Сообщений: 28840

05.06.2018 16:41, SOFT FOR YOU пишет:
> пишутся логи и данные в терминал

вкуда?

Posted via ActualForum NNTP Server 1.5

5 июн 18, 16:45    [21470467]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45047

SOFT FOR YOU
Контора многие годы занимается тем, что разрабатывает промышленные сервера для линукс. И
здесь используется как раз такая система, что пишутся логи и данные в терминал, в
зависимости от уровня логирования.

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

Posted via ActualForum NNTP Server 1.5

5 июн 18, 16:49    [21470490]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45047

https://blogs.msdn.microsoft.com/commandline/2017/06/20/understanding-windows-console-host-settings/

Posted via ActualForum NNTP Server 1.5

5 июн 18, 16:55    [21470520]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
SOFT FOR YOU
Member [заблокирован]

Откуда:
Сообщений: 2761
Dimitry Sibiryakov,

Я проверял, у меня не сохраняется
Может быть потому, что область вывода и размеры окна меняю
Может, что приложение изначально не консоль, а вызывается AllocConsole
5 июн 18, 17:05    [21470565]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45047

SOFT FOR YOU
Может, что приложение изначально не консоль, а вызывается AllocConsole

А ты проверь: убери свои прыжки в ширину, измени параметры через диалог из системной
менюшки и посмотри где эта консоль откроется в следующий раз.

Posted via ActualForum NNTP Server 1.5

5 июн 18, 17:14    [21470599]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
чччД__
Guest
SOFT FOR YOU
Dimitry Sibiryakov,

Я проверял, у меня не сохраняется
Может быть потому, что область вывода и размеры окна меняю
Может, что приложение изначально не консоль, а вызывается AllocConsole


Может, и не сохраняется, кто знает, что там у тебя за код.
...
Сделай консольный лончер. Крошечное консольное приложение, которое будет стартовать твой сервис и завершаться.
А сервис уже будет использовать консоль лончера.
5 июн 18, 17:19    [21470621]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
SOFT FOR YOU
Member [заблокирован]

Откуда:
Сообщений: 2761
Dimitry Sibiryakov,

Да проверяли уже
Говорю же )
5 июн 18, 17:20    [21470628]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45047

SOFT FOR YOU
Да проверяли уже
Говорю же )

Ну значит руки рихтуйте, проверяльщики, ибо у меня AllocConsole() в тестовом приложении,
сляпанном за пару минут, показывает консоль точно на том месте, которое я ей задал в
конфигурации. Ссылка, приведённая мною выше, не врёт.

Posted via ActualForum NNTP Server 1.5

5 июн 18, 17:55    [21470761]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
SOFT FOR YOU
Member [заблокирован]

Откуда:
Сообщений: 2761
Dimitry Sibiryakov,

А область вывода менял?
5 июн 18, 18:05    [21470789]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
SOFT FOR YOU
Member [заблокирован]

Откуда:
Сообщений: 2761
Может быть и правда я криво проверял
В любом случае я центрирую окно и хочу сделать это по красоте
Если к сообщению первого оратора есть что добавить - ради бога
5 июн 18, 18:07    [21470794]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 45047

SOFT FOR YOU
А область вывода менял?

А твоя "область вывода" это, случайно так, не "Screen Buffer", которых может быть много?..
Они, сюрприз, в Windows существуют отдельно от консольного окна.

Posted via ActualForum NNTP Server 1.5

5 июн 18, 18:20    [21470828]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
SOFT FOR YOU
Member [заблокирован]

Откуда:
Сообщений: 2761
Зафигачил функцию, всё работает

procedure AllocInvisibleConsole;
var
  FileName: string;
  Buffer: array[0..MAX_PATH] of Char;
  StartupInfo: TStartUpInfo;
  ProcInfo: TProcessInformation;
  Handle: THandle;
  Coord: TCoord;
  Temp: Cardinal;
  Info: TConsoleScreenBufferInfo;
  Count: NativeUInt;
begin
  SetString(FileName, Buffer, GetSystemDirectory(Buffer, MAX_PATH - 1));
  FileName := IncludeTrailingPathDelimiter(FileName) + 'cmd.exe';

  FillChar(StartupInfo, SizeOf(TStartupInfo), #0);
  StartupInfo.cb := SizeOf(TStartupInfo);
  StartupInfo.wShowWindow := SW_HIDE;
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  if (FileExists(FileName)) and (CreateProcess(PChar(FileName), nil, nil, nil,
    True, NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcInfo)) then
  begin
    while (not AttachConsole(ProcInfo.dwProcessId)) do
      Sleep(10);

    TerminateProcess(ProcInfo.hProcess, Temp);
    SetConsoleTitle(PChar(ParamStr(0)));

    Handle := GetStdHandle(STD_OUTPUT_HANDLE);
    GetConsoleScreenBufferInfo(Handle, Info);
    Count := NativeUInt(Info.dwSize.X) * NativeUInt(Info.dwSize.Y);
    FillChar(Coord, SizeOf(Coord), #0);
    FillConsoleOutputAttribute(Handle, Info.wAttributes, Count, Coord, Temp);
    FillConsoleOutputCharacter(Handle, #32, Count, Coord, Temp);
    FillChar(Coord, SizeOf(Coord), #0);
    SetConsoleCursorPosition(Handle, Coord);
  end else
  begin
    AllocConsole;
    ShowWindow(GetConsoleWindow, SW_HIDE);
  end;
end;


Вопрос. Это работает в Windows 10. В других виндах сюрпризов не будет? Меня смущает STD_OUTPUT_HANDLE/STD_INPUT_HANDLE
7 июн 18, 13:50    [21475947]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
defecator
Member

Откуда:
Сообщений: 39475
SOFT FOR YOU
Зафигачил функцию, всё работает

procedure AllocInvisibleConsole;
var
  FileName: string;
  Buffer: array[0..MAX_PATH] of Char;
  StartupInfo: TStartUpInfo;
  ProcInfo: TProcessInformation;
  Handle: THandle;
  Coord: TCoord;
  Temp: Cardinal;
  Info: TConsoleScreenBufferInfo;
  Count: NativeUInt;
begin
  SetString(FileName, Buffer, GetSystemDirectory(Buffer, MAX_PATH - 1));
  FileName := IncludeTrailingPathDelimiter(FileName) + 'cmd.exe';

  FillChar(StartupInfo, SizeOf(TStartupInfo), #0);
  StartupInfo.cb := SizeOf(TStartupInfo);
  StartupInfo.wShowWindow := SW_HIDE;
  StartupInfo.dwFlags := STARTF_USESHOWWINDOW;
  if (FileExists(FileName)) and (CreateProcess(PChar(FileName), nil, nil, nil,
    True, NORMAL_PRIORITY_CLASS, nil, nil, StartupInfo, ProcInfo)) then
  begin
    while (not AttachConsole(ProcInfo.dwProcessId)) do
      Sleep(10);

    TerminateProcess(ProcInfo.hProcess, Temp);
    SetConsoleTitle(PChar(ParamStr(0)));

    Handle := GetStdHandle(STD_OUTPUT_HANDLE);
    GetConsoleScreenBufferInfo(Handle, Info);
    Count := NativeUInt(Info.dwSize.X) * NativeUInt(Info.dwSize.Y);
    FillChar(Coord, SizeOf(Coord), #0);
    FillConsoleOutputAttribute(Handle, Info.wAttributes, Count, Coord, Temp);
    FillConsoleOutputCharacter(Handle, #32, Count, Coord, Temp);
    FillChar(Coord, SizeOf(Coord), #0);
    SetConsoleCursorPosition(Handle, Coord);
  end else
  begin
    AllocConsole;
    ShowWindow(GetConsoleWindow, SW_HIDE);
  end;
end;



Вопрос. Это работает в Windows 10. В других виндах сюрпризов не будет? Меня смущает STD_OUTPUT_HANDLE/STD_INPUT_HANDLE

поставь винду в виртуалку и проверь
7 июн 18, 13:52    [21475952]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2] 3 4   вперед  Ctrl      все
Все форумы / Delphi Ответить