На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! user posted image
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.

Соблюдайте общие правила форума

Следующие вопросы задаются очень часто, подробно разобраны в FAQ и, поэтому, будут безжалостно удаляться:
1. Преобразовать переменную типа String в тип PChar (PAnsiChar)
2. Как "свернуть" программу в трей.
3. Как "скрыться" от Ctrl + Alt + Del (заблокировать их и т.п.)
4. Как запустить программу/файл? (и дождаться ее завершения)
5. Как перехватить API-функции, поставить hook? (перехват сообщений от мыши, клавиатуры - внедрение в удаленное адресное прстранство)
... (продолжение следует) ...

Внимание:
Попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки - бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Rouse_, user posted image Krid

Модераторы: Rouse_, Krid
  
> Перезапуск текущего процесса , Как перезапустить программу
    Привет всем.
    Я встречал такие программы, где, например, при изменении настроек, программа спрашивает :
    "Мол, перезапуститься?". При нажатии Ок программа (процесс) перезапускается сам.
    Вопрос:
    Как мне перезапустить свой процесс?
    Заранее благодарен.
      ExpandedWrap disabled
        ...
        uses ShellAPI;
        ...
        procedure TForm1.Button1.Click(Sender: TObject);
        begin
          if MessageBox(Handle,'Перезапустить прогу?','Вопрос',MB_YESNOor
                        MB_ICONQUESTION or MB_DEFBUTTON2)=IDYES
          then begin
            ShellExecute (0, 'open', PChar(Application.ExeName), nil, nil,
                          SW_SHOWNORMAL);
            {Halt}PostQuitMessage(0);
          end;
        end;
      Сообщение отредактировано: Mr. Gonarh -
        Только лучше закрываться по хорошему, к примеру заменить Halt на PostQuitMessage(0) или аналог
          Цитата Rouse_ @
          Только лучше закрываться по хорошему, к примеру заменить Halt на PostQuitMessage(0) или аналог

          согласен :yes:
          Сообщение отредактировано: Mr. Gonarh -
            Решение, конечно, простое...
            Прокоментируйте, пожалуйста, что значит строка:
            {Halt}PostQuitMessage(0)
            Заранее благодарен.
              Цитата
              Прокоментируйте, пожалуйста, что значит строка:
              {Halt}PostQuitMessage(0)

              Это завершение работы программы. Вообще, способов много, вот основные:

              1. ExitProcess или TerminateProcess самое "грубое" завершение. Процесс немедленно завершается, никакая финализация не производится, никаких возможностей прервать завершение процесса либо сохранить данные после вызова нет.
              2. Halt - чуть более мягкое завершение. Перед завершением выполняется финализационный код юнитов, также вызывается ExitProc.
              3. PostQuitMessage - еще более мягкое. Сообщение о завершении кладется в очередь, но выполнение кода не прерывается, он продолжает выполнение с того же места. Далее цикл выборки сообщений извлекает его (но перед этим будут обработаны все остальные сообщения из очереди, кроме очереди виртуального ввода, сообщений WM_PAINT и WM_TIMER из-за их низкого приоритета), и в обработчике этого сообщения вызывается Halt
              4. Application.Terminate - еще мягче. Вызывается CallTerminateProcs, затем - PostQuitMessage. При этом есть возможность прервать завершение процесса из одной из TerminateProcs, вернув в ней False, а также выполнить некоторые действия.
              5. Закрытие главной формы - еще мягче. Есть возможность прервать закрытие из обработчика OnCloseQuery и выполнить очистку/сохранение результатов. Если закрытие разрешено - вызывается OnClose и Application.Terminate
                --Ins--, большое спасибо за инф.
                +1
                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                0 пользователей:


                Рейтинг@Mail.ru
                [ Script execution time: 0,0473 ]   [ 15 queries used ]   [ Generated: 18.07.25, 02:06 GMT ]