powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ShellExecute: задержка выполнения программы до отработки внешней программы
24 сообщений из 74, страница 3 из 3
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898754
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
05.12.2019 17:16, ёёёёё пишет:
> переводить вывод консольных приложений в мемо(и т.п.) чревато искажениями.
> "Консолька" не всегда лишь просто печатает текст.

gbak этим не страдает.
в отличие от dcc32
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898770
white_nigger
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий
оно кстати, кочует по интернетам из FAQа в FAQ...
ёёёёё
Код: pascal
1.
2.
    CloseHandle(ResultInfo.hThread); // закрываем дескриптор процесса
    CloseHandle(ResultInfo.hProcess); // закрываем дескриптор треда


Эти комменты тоже так кочуют?
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898772
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
white_nigger,

не, это совсем свежая лажа. А у меня там еще вместо бесконечного ожидания периодическая обработка событий, и еще древний косяк нашелся...
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898775
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А, нет, это древнее зло: http://delphirus.com/article32.html
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898776
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sinemurius
Кстати, может кому интересно, написал процедурку для вызова из консольной программы другой консольной команды.
При этом вывод вызываемой команды идет в основную консоль.

Код: pascal
1.
2.
3.
...
          OemToAnsi(PAnsiChar(S),PAnsiChar(S2));
...


А если прога пишет не в oem, то вывод превратится в тыкву
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898795
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2
А если прога пишет не в oem, то вывод превратится в тыкву

Не знаю насчёт проги, но cmd.exe, собака, в консоль пишет в оем, даже если в скрипте есть команда 'chcp 1251' и вывод идёт в ANSI.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898816
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Не знаю насчёт проги, но cmd.exe, собака, в консоль пишет в оем, даже если в скрипте есть команда 'chcp 1251' и вывод идёт в ANSI.

Там, видимо, тоже прогеры такого типа были, вкорячили безусловный AnsiToOem )))

upd Проверил, всё нормально он пишет. chcp 1251 && cmd /? > outp дает правильную кодировку
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898876
a-gulia69
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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.
const
  ShowCommands: array[TExecState] of Integer = (SW_SHOWNORMAL, SW_MINIMIZE, SW_SHOWMAXIMIZED, SW_HIDE);

function FileExecuteWait(const FileName, Params, StartDir: string; InitialState: TExecState): Integer;
var
  Info: TShellExecuteInfo;
  ExitCode: DWORD;
begin
  FillChar(Info, SizeOf(Info), 0);
  Info.cbSize := SizeOf(TShellExecuteInfo);
  with Info do 
  begin
    fMask := SEE_MASK_NOCLOSEPROCESS;
    Wnd := HInstance;
    lpFile := PChar(FileName);
    lpParameters := PChar(Params);
    lpDirectory := PChar(StartDir);
    nShow := ShowCommands[InitialState];
  end;
  if ShellExecuteEx(@Info) then
  begin
    repeat
      ProcessMessages;
      GetExitCodeProcess(Info.hProcess, ExitCode);
    until (ExitCode <> STILL_ACTIVE);

    Result := ExitCode;
  end
  else
    Result := -1;
end;
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898880
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Василий 2
upd Проверил, всё нормально он пишет. chcp 1251 && cmd /? > outp дает правильную кодировку

Я через программное перенаправление вывода брал, хотя может уже забыл чего за давностью, но точно помню что OemToAnsi() вызывать приходилось.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898897
YuRock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
a-gulia69
Код: 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.
const
  ShowCommands: array[TExecState] of Integer = (SW_SHOWNORMAL, SW_MINIMIZE, SW_SHOWMAXIMIZED, SW_HIDE);

function FileExecuteWait(const FileName, Params, StartDir: string; InitialState: TExecState): Integer;
var
  Info: TShellExecuteInfo;
  ExitCode: DWORD;
begin
  FillChar(Info, SizeOf(Info), 0);
  Info.cbSize := SizeOf(TShellExecuteInfo);
  with Info do 
  begin
    fMask := SEE_MASK_NOCLOSEPROCESS;
    Wnd := HInstance;
    lpFile := PChar(FileName);
    lpParameters := PChar(Params);
    lpDirectory := PChar(StartDir);
    nShow := ShowCommands[InitialState];
  end;
  if ShellExecuteEx(@Info) then
  begin
    repeat
      ProcessMessages;
      GetExitCodeProcess(Info.hProcess, ExitCode);
    until (ExitCode <> STILL_ACTIVE);

    Result := ExitCode;
  end
  else
    Result := -1;
end;

Ад
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39898970
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
Я через программное перенаправление вывода брал, хотя может уже забыл чего за давностью, но точно помню что OemToAnsi() вызывать приходилось.

Есть вероятность, что chcp влияет только на вывод в консоль
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39899491
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Рекомендую вместо интернета чаще в жедаевские либы заглядывать. большинство распространенных проблем там уже решены и достаточно качественно:
https://github.com/Makhaon/jcl/blob/4199a5554797359974e48c4abd825a2250980971/jcl/source/windows/JclMiscel.pas#L210
https://github.com/Makhaon/jcl/blob/4199a5554797359974e48c4abd825a2250980971/jcl/source/windows/JclMiscel.pas#L236
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39899610
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
makhaon
Рекомендую вместо интернета чаще в жедаевские либы заглядывать. большинство распространенных проблем там уже решены и достаточно качественно:
https://github.com/Makhaon/jcl/blob/4199a5554797359974e48c4abd825a2250980971/jcl/source/windows/JclMiscel.pas#L210
https://github.com/Makhaon/jcl/blob/4199a5554797359974e48c4abd825a2250980971/jcl/source/windows/JclMiscel.pas#L236

Код: pascal
1.
2.
3.
uses
  ...
  JclResources, JclSecurity, JclStrings, JclSysUtils, JclSysInfo;


Вот за это я не люблю JCL/JVCL. Добавляешь юнит ради 1-2 процедур или компонентов, получаешь +2-3 мегабайта к экзешнику в нагрузку.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39899630
ёёёёё
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp,

можно же аккуратненько выкусить нужное.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39899820
alekcvp
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ёёёёё
alekcvp,
можно же аккуратненько выкусить нужное.


Ну так о том и речь, что проще свою сделать, чем тянуть этот чемодан.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39899876
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
09.12.2019 10:46, alekcvp пишет:
>
> Ну так о том и речь, что проще свою сделать, чем тянуть этот чемодан.

да ну его нафиг, он же без ручки!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39899956
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
alekcvp
ёёёёё
alekcvp,
можно же аккуратненько выкусить нужное.


Ну так о том и речь, что проще свою сделать, чем тянуть этот чемодан.

Нужная функция вполне автономна, к тому же она
1) уже готова
2) вероятно, протестирована
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39899970
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
09.12.2019 13:44, Василий 2 пишет:
>
> Нужная функция вполне автономна, к тому же она
> 1) уже готова
> 2) вероятно, протестирована

а нахрена там WaitForInputIdle(... INFINITE ) перед WaitForSingleObject() ?
и почему результат WaitForSingleObject() проверяется на WAIT_OBJECT_0 а не на WAIT_FAILED ?

ы?

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39900687
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий

а нахрена там WaitForInputIdle(... INFINITE ) перед WaitForSingleObject() ?
и почему результат WaitForSingleObject() проверяется на WAIT_OBJECT_0 а не на WAIT_FAILED ?

WaitForInputIdle тут лишний - возможно, копипаст или наследие давних времен.

Ну а WaitForSingleObject просто запускают, и только в случае успешного завершения с WAIT_OBJECT_0 возвращают код выхода процесса. В остальных случаях просто проваливаются ниже (а что еще делать, если Wait вернула FAILED?)
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39900710
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10.12.2019 11:29, Василий 2 пишет:
>
> Ну а WaitForSingleObject просто запускают, и только в случае успешного завершения с WAIT_OBJECT_0 возвращают код выхода процесса.

не совсем так.
WaitForSingleObject не только к процессам применяется - там и мьютексы, и таймеры, и семафоры и т.д.
https://docs.microsoft.com/ru-ru/windows/win32/sync/using-mutex-objects
по хорошему, нужно делать CASE на результат вызова.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39900742
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий

не совсем так.
WaitForSingleObject не только к процессам применяется - там и мьютексы, и таймеры, и семафоры и т.д.
https://docs.microsoft.com/ru-ru/windows/win32/sync/using-mutex-objects
по хорошему, нужно делать CASE на результат вызова.

*чешу в затылке*
А это ты к чему вообще? Тут же вызывают для хэндла процесса. И какие варианты возврата вообще могут быть?
WAIT_ABANDONED - не применимо, судя по описанию (только для мутексов)
WAIT_OBJECT_0 - ОК, штатно завершился. Получить exit code
WAIT_TIMEOUT - таймаут, но в данном случае не возникнет, т.к. infinite
WAIT_FAILED - а тут вообще хз, что случилось. Лучшее, что можно сделать, это закрыть хэндлы.
Да и в остальных случаях, кроме штатного завершения, это единственная мера.
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39900746
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
10.12.2019 12:22, Василий 2 пишет:
> WAIT_FAILED - а тут вообще хз, что случилось.

вот в этом случае как раз имеет смысл таки "спросить"
GetLastError, что ж там такое произошло.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39900828
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий

вот в этом случае как раз имеет смысл таки "спросить"
GetLastError, что ж там такое произошло.

Согласен, но тут уж функция так сделана, если получили отлуп - так и получили. По-хорошему, если уж им не хотелось кидать исключение, то надо получать lasterror и устанавливать его после CloseHandle (т.к. она обнуляет lasterror)
...
Рейтинг: 0 / 0
ShellExecute: задержка выполнения программы до отработки внешней программы
    #39900847
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, пожалуй это оптимальный вариант
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
24 сообщений из 74, страница 3 из 3
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ShellExecute: задержка выполнения программы до отработки внешней программы
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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