Как закрыть программу из delphi

Ниже приведен код, который поможет вам завершить ВСЕ задачи без всяких уведомлений о необходимости сохранения данных.

Поэтому, прежде чем запустить этот код, убедитесь в наличии сохраненных данных и в том, что пользователь осведомлен об этой операции.

Подробности Родительская категория: Windows Категория: Запуск и завершение приложений

Запустить приложение и подождать

Function ExecuteFile(FileName, Params, WorkingDir: string ; Wait:boolean):integer;

buffer: array [ 0 .. 511 ] of Char;

ext, key, fname, path: string ;

if WorkingDir<> » then ChDir(WorkingDir);

if ext<> ‘.exe’ then

With TRegistry.create do

OpenKey(key+ ‘Shellopencommand’ , false);

if pos( ‘/’ , fname)> 0 then fname:=copy(fname, 1 , pos( ‘/’ ,fname)- 1 );

FName:=StringReplace(FName, ‘%1’ , » , [rfReplaceAll, rfIgnoreCase]);

if pos( ‘ ‘ ,FileName)> 0 then FileName:= ‘»‘ +Filename+ ‘»‘ ;

if Params<> » then TmpStr := TmpStr + ‘ ‘ + Params;

урок на Делфи — 40. Закрыть чужую программу

TmpStr := TmpStr + ‘ ‘ + Params;

if CreateProcess( nil , buffer, nil , nil , false, CREATE_NEW_CONSOLE or NORMAL_PRIORITY_ CLASS , nil , nil , StartupInfo, ProcessInfo) then

while WaitforSingleObject(ProcessInfo.hProcess, 200 )=WAIT_TIMEOUT do application.ProcessMessages;

Подробности Родительская категория: Windows Категория: Запуск и завершение приложений

Лимит на время выполнения программы

In der Projekt Datei (.dpr):

In your project’s file (.dpr):

Forms, Sysutils, Dialogs,

MyProgr in my_prog1.pas ;

email = Этот адрес электронной почты защищён от спам-ботов. У вас должен быть включен JavaScript для просмотра. ‘ ;

// Gultigkeit auf 21. April begrenzen.

function CheckDate(y, m, d: Integer): Boolean;

if (Date > EncodeDate(y, m, d)) then

ShowMessage( ‘End of usage exceeded. Download a new’ +

‘version at’ + ^j + homepage+ ^j + ‘ or contact: ‘ + email);

if CheckDate(YearExp, MonthExp, DayExp) then

Application.Title := ‘Some Title’ ;

Подробности Родительская категория: Windows Категория: Запуск и завершение приложений

Читайте также:
Составить программу для вычисления функции delphi

Запустить приложение с помощью ShellExecute и подождать

FillChar( exInfo, Sizeof(exInfo), 0 );

With exInfo Do Begin

cbSize:= Sizeof( exInfo ); // required!

Wnd := Handle; // forms handle

lpFile:= Pchar( pdffilename );

lpParameters := PChar( printernameAndPort );

While GetExitCodeProcess( exinfo.hProcess, exitcode )

and (exitcode = STILL_ACTIVE)

Подробности Родительская категория: Windows Категория: Запуск и завершение приложений

Особенности работы события onActivate

Наверное многие заметили, что событие onActivate формы ведет себя по странному, иногда происходит его активация просто при приобретении формой фокуса, а иногда событие происходит только в случае, когда форма становится видимой?

Виной тому виндовые API. Помните начиная с 98 виндов возникла фича — когда активация окна приводит к мельканию заголовка в таскбаре. Под win95/NT4 событие формы onActivate происходит только в момент показа формы (Show, ShowModal), а в остальных осях может возникать и просто при попадании фокуса на форму (уж не знаю почему, но не всегда). Есть хороший способ избавиться от такого поведения и заставить это событие возникать только 1 раз при активации формы и в дальнейшем только тогда когда это нужно.

урок на делфи 27. три способа закрыть программу.

Подробности Родительская категория: Windows Категория: Запуск и завершение приложений

Как завершить любой процесс, в том числе и системный

Включение, приминение и отключения привилегии. Для примера возьмем привилегию отладки приложений ‘SeDebugPrivilege’

необходимую для завершения ЛЮБЫХ процессов в системе (завершение процесов созданных текущим пользователем привилегия не нужна.

Название добавление/удаление привилгии немного неправильные. Привилегия или есть в токене процесса или ее нет. Если привилегия есть, то она может быть в

двух состояниях — или включеная или отключеная. И в этом примере мы только включаем или выключаем необходимую привилегию, а не добавляем ее.

Подробности Родительская категория: Windows Категория: Запуск и завершение приложений

Отследить завершение работы, (перезагрузку, смену пользователя) в Windows.

Очень часто мы сталкиваемся с проблемой, когда наша программа будучи запущенная в фоне и/или свёрнутая, например, в панель задач должна что-то сделать, когда Windows выключается, перезагружается или просто меняется пользователь.

Читайте также:
Почему не загружается программа на Триколор

Если мы не будем отслеживать такую ситуацию, то в худшем случае у нас могут просто потеряться какие-либо данные или Windows просто не сможет выполнить перезагрузку до конца. Ей будет мешать наша программа. Не нужно думать, что Windows перед перезагрузкой рассылает приложениям сообщения о закрытии, так чтобы у тех выпаолнились обработчкики TForm.onCloseQuery/onClose.

ОС Windows отсылает перед перезагрузкой, выключением или сменой пользователя сообщения WM_QUERYENDSESSION, а потом по его успешному завершению WM_ENDSESSION. Наше приложение должно поймать эти сообщения и отреагировать так чтобы дать понять, что мы согласны перезагружаться. В частности на сообщение WM_QUERYENDSESSION мы должны вернуть не 0:

Подробности Родительская категория: Windows Категория: Запуск и завершение приложений

Как запретить кнопку close в любом окне?

Следующий пример запрещает кнопку закрытия (и пункт «закрыть» (close) в системном меню) нужного нам окна (в данном случае Notepad).

Подробности Родительская категория: Windows Категория: Запуск и завершение приложений

Процессы, потоки и функции ShellExecute и WinExec

Устройство Windows. Процессы, потоки и функции ShellExecute и WinExec. Часть 1.

По просьбам общественности и была написана эта статья.

Действительно невозможно профессионально разрабатывать многопоточные программы,

не зная, что такое процессы, потоки, нити и синхронизация (надеюсь посвятить этому одну из следующих статей) и,

не представляя, как они работают. В статье за основу взята операционная система Windows 2000.

Так же в этой статье будут подробно рассмотрены различные методы запуска новых процессов (программ).

Источник: delphi-hlp.ru

Как закрыть программу из delphi

В вопросе у меня есть строка «Пробовал все функции по отдельности и все вместе», и работают они одинаково: Сначала полностью выполняется код вызывающей процедуры, а затем программа закрывается без всяких дополнительных действий

unit Routines; interface uses Winapi.Windows, . ; procedure FolderSetap;//Создание папки «Настройки» . procedure CheckAndCreateFolder(DirName:string); . implementation uses SFolders, SPhotos, ListCamer; procedure FolderSetap; //Вызывающая процедура var Dir:string; . ; begin . CheckAndCreateFolder(Dir); . // После щелчка пользователя по кнопке ОК в сообщении . // выполняется весь код ниже вызова CheckAndCreateFolder . // вплоть до end, и лишь потом программа закрывается. end;

Читайте также:
Какие функции используются в программе excel для прогнозирования

Работа функции Application.Terminate отличается от других лишь тем, что модальное окно (S_folder) три раза «подмигивает», но программа не закрывается.

Регулярная процедура procedure CheckAndCreateFolder() ничего не знает и не может знать ни о каких формах включая главную. Также она не может ничего знать о любых глобальных переменных объявленных в любом модуле проекта.

Это еще почему? Чем эта процедура хуже других?
Пока, если не будет найдено другого решения, я добавил глобальную переменную Bol:boolean. Если папка уже существует, то CheckAndCreateFolder устанавливает ее в true. В вызывающую процедуру, сразу после вызова CheckAndCreateFolde, добавил строку if Bol then exit. Теперь функции S_F.Close и Application.Terminate сразу закрывают приложение, а функция S_folder.Close — закрывает только модальную форму. Все, как и должно быть.

Не люблю глобальные переменные, пытаюсь использовать их как можно меньше. Если есть другое решение, то подскажите.
С уважением, Николай.

Источник: www.programmersforum.ru

Закрытие приложения

Как можно закрыть приложение, если я его пишу только с использованием WinApi, без окон?

Отслеживать

задан 30 апр 2012 в 10:15

delphikettle delphikettle

1,330 4 4 золотых знака 24 24 серебряных знака 48 48 бронзовых знаков

5 ответов 5

Сортировка: Сброс на вариант по умолчанию

  • Никто, кстати говоря, не упомянул graceful способа выйти из приложения (по сравнению с ExitProcess), который заключается в использовании функции PostQuitMessage.

Разница между ExitProcess и PostQuitMessage в том, что второй способ предполагает собой более плавный выход с точки зрения Message Pump .

Сообщение WM_QUIT является виртуальным, что идеологически соответствует сообщению с низким приоритетом для pull’a из очереди. С точки зрения практики это позволяет вашему приложению обработать все не-виртуальные (то есть более приоритетные) сообщения перед выходом из программы.

Не сталкивался на практике, но, думаю, что потенциально вызов ExitProcess вполне себе может приводить к зрительным артефактам и какому-нибудь другому нежелательному behavior’у .

  • Неплохую статью по теме можно почитать здесь.

Отслеживать

1,163 2 2 золотых знака 14 14 серебряных знаков 19 19 бронзовых знаков

Источник: ru.stackoverflow.com

Рейтинг
( Пока оценок нет )
Загрузка ...
EFT-Soft.ru