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

Откуда:
Сообщений: 2761
Нужно создать временно невидимую консоль, а в случае AllocConsole + ShowWindow она всё равно успевает мелькнуть
В интернете прочёл, что можно вручную создать консоль в режиме временно невидимого окна
Но найденные куски кода пока к успеху не привели, CreateProcess возвращает False

Подскажите, какие параметры должны быть, чтобы повторить AllocConsole
Желательно куски кода
5 июн 18, 02:02    [21468383]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
чччД__
Guest
SOFT FOR YOU,

Ну, например. С помощью CreateProcess создай "консольный" процесс. Например, cmd.exe.

В startUpInfo задай:

startUpInfo.wShowWindow := SW_HIDE;
startUpInfo.dwFlags := STARTF_USESHOWWINDOW;

- вот и будет консоль невидимой.

Потом присасываешься к консоли этого процесса:
    AttachConsole(ProcInfo.dwProcessId) 


Учти, что AttachConsole() может не сработать, ибо процесс создания консоли может быть еще в состоянии запуска.
Можно в цикле ждать успешного AttachConsole(),
    while not AttachConsole(ProcInfo.dwProcessId) do
      sleep(50);

или ещё как, в общем не маленький, сообразишь.

И завершаешь процесс
      TerminateProcess(ProcInfo.hProcess, fExCode);

Все.

function AttachConsole(dwProcessID: Integer): Boolean; stdcall; external 'kernel32.dll';

function CreateInvisibleConsole(): boolean;
var
  fAttached: Boolean;
  fExCode: Cardinal;
  stdOut: THandle;
  startUpInfo: TStartUpInfo;
  ProcInfo: TProcessInformation;
begin
  result := false;
  FillChar(startUpInfo, SizeOf(TStartUpInfo), 0);
  startUpInfo.cb := SizeOf(TStartUpInfo);
  startUpInfo.hStdOutput := stdOut;
  startUpInfo.wShowWindow := SW_HIDE;
  startUpInfo.dwFlags := STARTF_USESHOWWINDOW;


  if CreateProcess(Pchar('C:\Windows\system32\cmd.exe'), nil, nil, nil, true,
    NORMAL_PRIORITY_CLASS
    , nil, nil, StartupInfo, ProcInfo) then begin

    while not AttachConsole(ProcInfo.dwProcessId) do
      sleep(50);
    TerminateProcess(ProcInfo.hProcess, fExCode);

    writeln('test 1');
    writeln('test 2');
    writeln('test 3');

    result := true
  end;

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

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

Спасибо
А StdOut чего не заполняешь?
5 июн 18, 09:32    [21468671]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
чччД__
Guest
Да, ну ты уж сам там доделай.
5 июн 18, 11:34    [21469093]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
Gator
Member

Откуда: Москва
Сообщений: 13824
А зачем на скрытой консоли?
5 июн 18, 11:39    [21469129]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
Dimitry Sibiryakov
Member

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

SOFT FOR YOU
Нужно создать временно невидимую консоль

Главный вопрос: зачем? Второстепенный вопрос: при чём тут CreateProcess?

Posted via ActualForum NNTP Server 1.5

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

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

Ну я как раз не понимаю, что делать с StdOut/Input/Error
Поэтому и спрашиваю
5 июн 18, 12:01    [21469213]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
SOFT FOR YOU
Member [заблокирован]

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

После создания консоли, я её настраиваю
Задаю размеры, область вывода, позиционирую в центр экрана, меняю Caption
Если создавать сразу видимую - то она неприятно моргает
5 июн 18, 12:03    [21469224]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
Мимопроходящий
Member

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

05.06.2018 11:48, Dimitry Sibiryakov пишет:
> Главный вопрос: зачем?

он мыслит "окошками".
пишет супер-пупер "сёрвис".
но окошко у сёрвиса быть должно.
(по мнению аффтора)

в общем - клиника.

Posted via ActualForum NNTP Server 1.5

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

Ну я как раз не понимаю, что делать с StdOut/Input/Error
Поэтому и спрашиваю

Консоль нужна, да-да, но для чего - сам не знаю...
п....ц.
5 июн 18, 12:06    [21469239]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
defecator
Member

Откуда:
Сообщений: 38477
Мимопроходящий
05.06.2018 11:48, Dimitry Sibiryakov пишет:
> Главный вопрос: зачем?

он мыслит "окошками".
пишет супер-пупер "сёрвис".
но окошко у сёрвиса быть должно.
(по мнению аффтора)

в общем - клиника.

ты там давай, не спорь с величайшим программистом в истории !
он, наконец-то, занялся нормальными прикладными задачами, а не самым быстрым в мире лапшекодом !
не спугни !
5 июн 18, 12:11    [21469261]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
Dimitry Sibiryakov
Member

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

SOFT FOR YOU
После создания консоли, я её настраиваю
Задаю размеры, область вывода, позиционирую в центр экрана, меняю Caption

Зайди с другой стороны: Windows помнит параметры консоли для каждого приложения
индивидуально. Выясни где она это хранит и задавай параметры консоли для совего приложения
перед её созданием.

Posted via ActualForum NNTP Server 1.5

5 июн 18, 12:18    [21469292]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
Leonid Kudryavtsev
Member

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

Ну в MSDN ф-ций для консоли: раз,два и все.

Вы же не предлагаете, системные структуры Windows ручками в 0 кольце защиты править ))).
5 июн 18, 12:27    [21469321]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
Dimitry Sibiryakov
Member

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

Leonid Kudryavtsev
Вы же не предлагаете, системные структуры Windows ручками в 0 кольце защиты править ))).

Они сохраняются между сеансами, так что вряд ли они в кольце 0. Реестр скорее всего.

Posted via ActualForum NNTP Server 1.5

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

Откуда:
Сообщений: 2761
Мимопроходящий,

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

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

Я же объяснил, зачем мне эмулировать AllocConsole
Что не понятного?
5 июн 18, 13:39    [21469588]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
чччД__
Guest
Ну так эмулируй, а не попрошайничай.
Тебе и код дали, и направление - что ещё за тебя сделать?
Не можешь головой работать - иди в армию.
5 июн 18, 13:46    [21469614]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
Dimitry Sibiryakov
Member

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

SOFT FOR YOU
Ты не задавался вопросом, почему линуксовые сервисы имеют консольный вывод?

Ты не поверишь, но они вообще вывода не имеют. Канонический сниппет демонизации
перекидывает его в /dev/nul или просто закрывает.

Posted via ActualForum NNTP Server 1.5

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

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

Так а я не попрошайничаю, а нормально спрашиваю. За код спасибо. Нечего добавить - ради бога. Только грубить не надо.
5 июн 18, 14:02    [21469659]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
SOFT FOR YOU
Member [заблокирован]

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

Почему же не поверю? Поверю. Только ситуации тоже разные бывают.
В отладке можно и в скринах запускать
Вывод в терминал есть. А как ты его используешь - дело программиста
5 июн 18, 14:14    [21469723]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
Dimitry Sibiryakov
Member

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

SOFT FOR YOU
Только ситуации тоже разные бывают.
В отладке можно и в скринах запускать

Так это для отладки линуксовых демонов тебе нужна консоль точно посередине экрана?
Понятненько...

Posted via ActualForum NNTP Server 1.5

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

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

Почему линуксовых?
А в винде разве не надо сервисы отлаживать?
Да и под линуксами, почему, собственно нет
5 июн 18, 14:58    [21469890]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
чччД__
Guest
SOFT FOR YOU
Dimitry Sibiryakov,

Почему линуксовых?
А в винде разве не надо сервисы отлаживать?
...

Интересно, с каким юзером ты собрался взаимодействовать, пытаясь создать консоль из сервиса? Ну, в какой пользовательской сессии будет доступна такая консоль?
Поясни, пожалуйста.
5 июн 18, 15:09    [21469935]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
SOFT FOR YOU
Member [заблокирован]

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

А кто отлаживает сервис? Программист или тестер
5 июн 18, 15:16    [21469980]     Ответить | Цитировать Сообщить модератору
 Re: CreateProcess-аналог AllocConsole  [new]
чччД__
Guest
SOFT FOR YOU,

да, кто. Я это и спросил. В контексте какой сессии "сидит" программист, и в какой - сервис.
5 июн 18, 15:20    [21469999]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2 3 4   вперед  Ctrl      все
Все форумы / Delphi Ответить