powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / CreateProcess-аналог AllocConsole
25 сообщений из 95, страница 1 из 4
CreateProcess-аналог AllocConsole
    #39655294
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нужно создать временно невидимую консоль, а в случае AllocConsole + ShowWindow она всё равно успевает мелькнуть
В интернете прочёл, что можно вручную создать консоль в режиме временно невидимого окна
Но найденные куски кода пока к успеху не привели, CreateProcess возвращает False

Подскажите, какие параметры должны быть, чтобы повторить AllocConsole
Желательно куски кода
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655299
чччД__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOU,

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

В startUpInfo задай:

Код: pascal
1.
2.
startUpInfo.wShowWindow := SW_HIDE;
startUpInfo.dwFlags := STARTF_USESHOWWINDOW;


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

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



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


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

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


Все.

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
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;
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655359
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД__,

Спасибо
А StdOut чего не заполняешь?
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655440
чччД__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Да, ну ты уж сам там доделай.
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655446
Фотография Gator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А зачем на скрытой консоли?
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655457
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUНужно создать временно невидимую консоль

Главный вопрос: зачем? Второстепенный вопрос: при чём тут CreateProcess?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655467
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД__,

Ну я как раз не понимаю, что делать с StdOut/Input/Error
Поэтому и спрашиваю
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655471
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Gator,

После создания консоли, я её настраиваю
Задаю размеры, область вывода, позиционирую в центр экрана, меняю Caption
Если создавать сразу видимую - то она неприятно моргает
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655479
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.06.2018 11:48, Dimitry Sibiryakov пишет:
> Главный вопрос: зачем?

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

в общем - клиника.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655480
чччД__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOUчччД__,

Ну я как раз не понимаю, что делать с StdOut/Input/Error
Поэтому и спрашиваю
Консоль нужна, да-да, но для чего - сам не знаю...
п....ц.
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655484
Фотография defecator
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Модератор форума
Мимопроходящий05.06.2018 11:48, Dimitry Sibiryakov пишет:
> Главный вопрос: зачем?

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

в общем - клиника.
ты там давай, не спорь с величайшим программистом в истории !
он, наконец-то, занялся нормальными прикладными задачами, а не самым быстрым в мире лапшекодом !
не спугни !
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655489
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUПосле создания консоли, я её настраиваю
Задаю размеры, область вывода, позиционирую в центр экрана, меняю Caption

Зайди с другой стороны: Windows помнит параметры консоли для каждого приложения
индивидуально. Выясни где она это хранит и задавай параметры консоли для совего приложения
перед её созданием.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655497
Leonid Kudryavtsev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

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

Вы же не предлагаете, системные структуры Windows ручками в 0 кольце защиты править ))).
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655524
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Leonid KudryavtsevВы же не предлагаете, системные структуры Windows ручками в 0 кольце защиты править ))).

Они сохраняются между сеансами, так что вряд ли они в кольце 0. Реестр скорее всего.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655564
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Ты не задавался вопросом, почему линуксовые сервисы имеют консольный вывод?
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655567
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД__,

Я же объяснил, зачем мне эмулировать AllocConsole
Что не понятного?
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655573
чччД__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ну так эмулируй, а не попрошайничай.
Тебе и код дали, и направление - что ещё за тебя сделать?
Не можешь головой работать - иди в армию.
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655574
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUТы не задавался вопросом, почему линуксовые сервисы имеют консольный вывод?

Ты не поверишь, но они вообще вывода не имеют. Канонический сниппет демонизации
перекидывает его в /dev/nul или просто закрывает.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655584
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД__,

Так а я не попрошайничаю, а нормально спрашиваю. За код спасибо. Нечего добавить - ради бога. Только грубить не надо.
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655605
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Почему же не поверю? Поверю. Только ситуации тоже разные бывают.
В отладке можно и в скринах запускать
Вывод в терминал есть. А как ты его используешь - дело программиста
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655617
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SOFT FOR YOUТолько ситуации тоже разные бывают.
В отладке можно и в скринах запускать

Так это для отладки линуксовых демонов тебе нужна консоль точно посередине экрана?
Понятненько...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655655
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

Почему линуксовых?
А в винде разве не надо сервисы отлаживать?
Да и под линуксами, почему, собственно нет
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655664
чччД__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOUDimitry Sibiryakov,

Почему линуксовых?
А в винде разве не надо сервисы отлаживать?
...
Интересно, с каким юзером ты собрался взаимодействовать, пытаясь создать консоль из сервиса? Ну, в какой пользовательской сессии будет доступна такая консоль?
Поясни, пожалуйста.
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655668
SOFT FOR YOU
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
чччД__,

А кто отлаживает сервис? Программист или тестер
...
Рейтинг: 0 / 0
CreateProcess-аналог AllocConsole
    #39655671
чччД__
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SOFT FOR YOU,

да, кто. Я это и спросил. В контексте какой сессии "сидит" программист, и в какой - сервис.
...
Рейтинг: 0 / 0
25 сообщений из 95, страница 1 из 4
Форумы / Delphi [игнор отключен] [закрыт для гостей] / CreateProcess-аналог AllocConsole
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]