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

Подскажите, какие параметры должны быть, чтобы повторить AllocConsole
Желательно куски кода
...
Рейтинг: 0 / 0
05.06.2018, 03:29
    #39655299
чччД__
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CreateProcess-аналог AllocConsole
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
05.06.2018, 09:32
    #39655359
SOFT FOR YOU
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
CreateProcess-аналог AllocConsole
чччД__,

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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


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