Выдать код возврата из программы ....

Clarion, Clarion 7

Модератор: Дед Пахом

Правила форума
При написании вопроса или обсуждении проблемы, не забывайте указывать версию Clarion который Вы используете.
А так же пользуйтесь спец. тегами при вставке исходников!!!
Ответить
Аватара пользователя
Игорь Столяров
Ветеран движения
Сообщения: 7680
Зарегистрирован: 07 Июль 2005, 10:19
Откуда: г. Ростов-на-ДоМу
Благодарил (а): 26 раз
Поблагодарили: 68 раз

Выдать код возврата из программы ....

Сообщение Игорь Столяров »

Привет всем !
Clarion 6.3 9058

Вот потребовалось выдать код возврата (DOS ErrorLevel) из программы, сделанной на Clarion.
Ничего лучше, чем HALT(CodError) - не нашел, но его рекомендуют использовать только для отладки,
да и полное прерывание работы программы в точке возврата кода не есть очень хорошо ...

Есть ли идеи как еще можно вернуть код возврата ? Или записать его куда-нибудь через API ...
Заранее спасибо ! :)
Make Clarion Great Again ! 😎
Aнтон87
Посетитель
Сообщения: 33
Зарегистрирован: 07 Август 2008, 18:43

Re: Выдать код возврата из программы ....

Сообщение Aнтон87 »

Привет всем!

Игорь не утверждаю, что код написан мной, но интернете вот что нашел. Поскольку подобная задача и ранее у меня возникала.


Вопрос: Подскажите, как узнать, завершился ли процесс, запущеный по ShellExecute?

Ответ 1: Ниже работающая функция, которая реализует требуемую задачу.

Код: Выделить всё

RunJob                 FUNCTION(*CSTRING ProgramName,*CSTRING Param)

PROC::ID               STRING('RunJob')
SW_HIDE                EQUATE(0)
WE                     WinError
RetVal                 ULONG
ExitCode               ULONG

INFINITE               EQUATE(0FFFFFFFFh)
WAIT_FAILED            EQUATE(0FFFFFFFFh)
STARTF_USESHOWWINDOW   EQUATE(00000001h)

SI                     GROUP(STARTUPINFO).
PI                     GROUP(PROCESS_INFORMATION).

ProgPar                CSTRING(SIZE(FIL:ProgramName) + SIZE(FIL:Parameters))

  CODE
  WE.Init()
      
  ProgPar = ProgramName & ' ' & Param

  ! memset(ADDRESS(SI),0,SIZE(SI))
  SI.StructSize = SIZE(SI)
  SI.Flags      = STARTF_USESHOWWINDOW
  SI.ShowWindow = SW_HIDE

  Loging( PROC::ID & ' Starting Job ' & ProgPar)

  UNLOCKTHREAD()     
  IF CreateProcess(0,ADDRESS(ProgPar),0,0,FALSE,0,0,0,ADDRESS(SI),ADDRESS(PI))
    IF WaitForSingleObject(PI.hProcess,INFINITE)
      RetVal = WE.GetError()
    ELSE
      Loging( PROC::ID & ' Job ' & ProgramName & ' ended successful')
      IF ~GetExitCodeProcess(PI.hProcess, ADDRESS(ExitCode))
        RetVal = WE.GetError()
        Loging( PROC::ID & ' Error posted during ' & ProgramName)
      END
    END
  ELSE
    RetVal = WE.GetError()
    Loging( PROC::ID & ' Error posted during ' & ProgramName)
  END
  LOCKTHREAD()

  WE.Kill()
Ответить