- Выключение компьютера при помощи Delphi
- Параметры функции shutdown.
- Как завершить любой процесс, в том числе и системный
- Как завершить любой процесс, в том числе и системный
- Добавить комментарий
- Как выключить, перезагрузить или завершить Windows?
- Как выключить, перезагрузить или завершить Windows?
- Содержание материала
- Добавить комментарий
- Как выключить, перезагрузить или завершить Windows?
- Как выключить, перезагрузить или завершить Windows?
- Содержание материала
- Добавить комментарий
- Выключение пк
Выключение компьютера при помощи Delphi
Добрый день дорогие друзья, сегодня мы с Вами на примере разберем как программно выключить компьютер.
Для этого создадим новый проект. Проект будет очень простым: форма и две кнопки. Одна кнопка чтобы выключить компьютер, вторая для того чтобы отменить начатое отключение. На рисунке ниже представлен внешний вид предполагаемой формы:
Чтобы выключить компьютер нужно выполнить следующую команду:
Далее представлен листинг программы. Тут все предельно просто. На что стоит обратить внимание:
1. Подключен модуль ShellAPI.
2. Команда shutdown вызывается с параметрами (Все возможные параметры можно посмотреть под кодом программы).
Параметры функции shutdown.
В нашем примере функции передаются параметры » — s -t 00″. Параметр «-s» обозначает, что мы хотим выключить компьютере. Параметр «-t 00» — что мы хотим это сделать немедленно.
Разберем все возможные параметры.
shutdown [-l] [-s] [-r| [-a] [-f] [-m [\\имя_компьютера]] [-t xx] [-c «сообщение»]
- Функция с параметром [-l] осуществит выход из текущего пользователя системы
- [-s] Означает, что мы хотим выключить компьютер
- [-r| Перезагрузка компьютера
- [-f] Закрыть все запущенные приложения
- [-m [\\имя_компьютера]] — Выключить компьютер из сети
- [-t xx] отложить выключение на XX секунд
- [-c «сообщение»] вывести текст сообщения
Как завершить любой процесс, в том числе и системный
Как завершить любой процесс, в том числе и системный
Включение, приминение и отключения привилегии. Для примера возьмем привилегию отладки приложений ‘SeDebugPrivilege’
необходимую для завершения ЛЮБЫХ процессов в системе (завершение процесов созданных текущим пользователем привилегия не нужна.
Название добавление/удаление привилгии немного неправильные. Привилегия или есть в токене процесса или ее нет. Если привилегия есть, то она может быть в
двух состояниях — или включеная или отключеная. И в этом примере мы только включаем или выключаем необходимую привилегию, а не добавляем ее.
// Добавляем привилегию SeDebugPrivilege
// Для начала получаем токен нашего процесса
if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES
or TOKEN_QUERY, hToken ) then
// Получаем LUID привилегии
if not LookupPrivilegeValue( nil , ‘SeDebugPrivilege’ , SeDebugNameValue )
tkp.Privileges[ 0 ].Luid := SeDebugNameValue;
tkp.Privileges[ 0 ].Attributes := SE_PRIVILEGE_ENABLED;
// Добавляем привилегию к нашему процессу
if GetLastError() ERROR_SUCCESS then exit;
// Завершаем процесс. Если у нас есть SeDebugPrivilege, то мы можем
// завершить и системный процесс
// Получаем дескриптор процесса для его завершения
hProcess := OpenProcess(PROCESS_TERMINATE, FALSE, dwPID);
if hProcess = 0 then exit;
if not TerminateProcess(hProcess, DWORD(- 1 ))
tkp.Privileges[ 0 ].Attributes := 0 ;
AdjustTokenPrivileges(hToken, FALSE, tkp, SizeOf(tkp), tkp, ReturnLength);
if GetLastError() ERROR_SUCCESS
Добавить комментарий
Не использовать не нормативную лексику.
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!
Как выключить, перезагрузить или завершить Windows?
Как выключить, перезагрузить или завершить Windows?
Содержание материала
// (c) NeuralAbyss Software
logoff: Boolean = False;
reboot: Boolean = False;
warn: Boolean = False;
downQuick: Boolean = False;
cancelShutdown: Boolean = False;
powerOff: Boolean = False;
timeDelay: Integer = 0 ;
function HasParam(Opt: Char): Boolean;
for x := 1 to ParamCount do
if (ParamStr(x) = ‘-‘ + opt) or (ParamStr(x) = ‘/’ + opt) then Result := True;
function GetErrorstring: string ;
err: array [ 0 .. 512 ] of Char;
FormatMessage(FORMAT_ MESSAGE _FROM_SYSTEM, nil , lz, 0 , @err, 512 , nil );
Result := string (err);
rl, flgs: Cardinal;
if downQuick then flgs := flgs or EWX_FORCE;
if not reboot then flgs := flgs or EWX_SHUTDOWN;
if reboot then flgs := flgs or EWX_REBOOT;
if poweroff and ( not reboot) then flgs := flgs or EWX_POWEROFF;
if logoff then flgs := (flgs and ( not (EWX_REBOOT or EWX_SHUTDOWN or EWX_POWEROFF))) or
if Win32Platform = VER_PLATFORM_WIN32_NT then
if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
Writeln( ‘Cannot open process token. [‘ + GetErrorstring + ‘]’ )
if LookupPrivilegeValue( nil , ‘SeShutdownPrivilege’ , tkp.Privileges[ 0 ].Luid) then
tkp.Privileges[ 0 ].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, False, tkp, 0 , nil , rl);
if GetLastError <> ERROR_SUCCESS then
Writeln( ‘Error adjusting process privileges.’ );
Writeln( ‘Cannot find privilege value. [‘ + GetErrorstring + ‘]’ );
if AbortSystemShutdown(nil) = False then
Writeln(\’Cannot abort. [\’ + GetErrorstring + \’]\’)
if InitiateSystemShutdown(nil, nil, timeDelay, downQuick, Reboot) = False then
Writeln(\’Cannot go down. [\’ + GetErrorstring + \’]\’)
Writeln( ‘Shutdown v0.3 for Win32 (similar to the Linux version)’ );
Writeln( ‘(c) 2000 NeuralAbyss Software. All Rights Reserved.’ );
if HasParam( ‘?’ ) or (ParamCount = 0 ) then
Writeln( ‘Usage: shutdown [-akrhfnc] [-t secs]’ );
Writeln( ‘ -k: do not really shutdown, only warn.’ );
Writeln( ‘ -r: reboot after shutdown.’ );
Writeln( ‘ -h: halt after shutdown.’ );
Writeln( ‘ -p: power off after shutdown’ );
Writeln( ‘ -l: log off only’ );
Writeln( ‘ -n: kill apps that do not want to die.’ );
Writeln( ‘ -c: cancel a running shutdown.’ );
if HasParam( ‘k’ ) then warn := True;
if HasParam( ‘r’ ) then reboot := True;
if HasParam( ‘h’ ) and reboot then
Writeln( ‘Error: Cannot specify -r and -h parameters together!’ );
if HasParam( ‘h’ ) then reboot := False;
if HasParam( ‘n’ ) then downQuick := True;
if HasParam( ‘c’ ) then cancelShutdown := True;
if HasParam( ‘p’ ) then powerOff := True;
if HasParam( ‘l’ ) then logoff := True;
Добавить комментарий
Не использовать не нормативную лексику.
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!
Как выключить, перезагрузить или завершить Windows?
Как выключить, перезагрузить или завершить Windows?
Содержание материала
function MyExitWindows(RebootParam: Longword): Boolean;
SE_SHUTDOWN_ NAME = ‘SeShutdownPrivilege’ ;
if Win32Platform = VER_PLATFORM_WIN32_NT then
TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
if tpResult then
tpResult := LookupPrivilegeValue( nil ,
TTokenPvg.Privileges[ 0 ].Luid);
TTokenPvg.Privileges[ 0 ].Attributes := SE_PRIVILEGE_ENABLED;
if tpResult then
Result := ExitWindowsEx(RebootParam, 0 );
// Example to shutdown Windows:
procedure TForm1.Button1Click(Sender: TObject);
MyExitWindows(EWX_POWEROFF or EWX_FORCE);
// Example to reboot Windows:
procedure TForm1.Button1Click(Sender: TObject);
MyExitWindows(EWX_REBOOT or EWX_FORCE);
// (c) NeuralAbyss Software
logoff: Boolean = False;
reboot: Boolean = False;
warn: Boolean = False;
downQuick: Boolean = False;
cancelShutdown: Boolean = False;
powerOff: Boolean = False;
timeDelay: Integer = 0 ;
function HasParam(Opt: Char): Boolean;
for x := 1 to ParamCount do
if (ParamStr(x) = ‘-‘ + opt) or (ParamStr(x) = ‘/’ + opt) then Result := True;
function GetErrorstring: string ;
err: array [ 0 .. 512 ] of Char;
FormatMessage(FORMAT_ MESSAGE _FROM_SYSTEM, nil , lz, 0 , @err, 512 , nil );
Result := string (err);
rl, flgs: Cardinal;
if downQuick then flgs := flgs or EWX_FORCE;
if not reboot then flgs := flgs or EWX_SHUTDOWN;
if reboot then flgs := flgs or EWX_REBOOT;
if poweroff and ( not reboot) then flgs := flgs or EWX_POWEROFF;
if logoff then flgs := (flgs and ( not (EWX_REBOOT or EWX_SHUTDOWN or EWX_POWEROFF))) or
if Win32Platform = VER_PLATFORM_WIN32_NT then
if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,
Writeln( ‘Cannot open process token. [‘ + GetErrorstring + ‘]’ )
if LookupPrivilegeValue( nil , ‘SeShutdownPrivilege’ , tkp.Privileges[ 0 ].Luid) then
tkp.Privileges[ 0 ].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, False, tkp, 0 , nil , rl);
if GetLastError <> ERROR_SUCCESS then
Writeln( ‘Error adjusting process privileges.’ );
Writeln( ‘Cannot find privilege value. [‘ + GetErrorstring + ‘]’ );
if AbortSystemShutdown(nil) = False then
Writeln(\’Cannot abort. [\’ + GetErrorstring + \’]\’)
if InitiateSystemShutdown(nil, nil, timeDelay, downQuick, Reboot) = False then
Writeln(\’Cannot go down. [\’ + GetErrorstring + \’]\’)
Writeln( ‘Shutdown v0.3 for Win32 (similar to the Linux version)’ );
Writeln( ‘(c) 2000 NeuralAbyss Software. All Rights Reserved.’ );
if HasParam( ‘?’ ) or (ParamCount = 0 ) then
Writeln( ‘Usage: shutdown [-akrhfnc] [-t secs]’ );
Writeln( ‘ -k: do not really shutdown, only warn.’ );
Writeln( ‘ -r: reboot after shutdown.’ );
Writeln( ‘ -h: halt after shutdown.’ );
Writeln( ‘ -p: power off after shutdown’ );
Writeln( ‘ -l: log off only’ );
Writeln( ‘ -n: kill apps that do not want to die.’ );
Writeln( ‘ -c: cancel a running shutdown.’ );
if HasParam( ‘k’ ) then warn := True;
if HasParam( ‘r’ ) then reboot := True;
if HasParam( ‘h’ ) and reboot then
Writeln( ‘Error: Cannot specify -r and -h parameters together!’ );
if HasParam( ‘h’ ) then reboot := False;
if HasParam( ‘n’ ) then downQuick := True;
if HasParam( ‘c’ ) then cancelShutdown := True;
if HasParam( ‘p’ ) then powerOff := True;
if HasParam( ‘l’ ) then logoff := True;
Для выполнения перезагрузки/выключения предназначены функции ExitWindows/ExitWindowsEx
Function ExitWindows(Reserved: DWord; ReturnCode: Word): Bool;
Иницииpует стандаpтную пpоцедуpу завеpшения pаботы с Windows. Все пpикладные задачи должны подтвеpдить завеpшение pаботы Windows. Вызывает функцию 4CH пpеpывания 21H DOS.
Reserved: Установлен в нуль.
ReturnCode: Значение, пеpедаваемое в DOS (в pегистpе AL).
Нуль, если одна или несколько задач отказываются завеpшить pаботу.
ExitWindows(EWX_LOGOFF,0); — завершение сеанса
ExitWindows(EWX_SHUTDOWN,0); — выключение компьютера
Флаги EWX_FORCE, EWX_POWEROFF и EWX_FORCEIFHUNG могут комбинироваться к нужному действию.
Функция ExitWindowsEx() представляет собой расширенный вариант ExitWindows().
BOOL ExitWindowsEx( UINT uFlags, DWORD dwReserved, );
Функция ExitWindowsEx перезагружает(restart) или выключает систему (shutdown), а также может завершить сессию для текущего пользователя(log off).
uFlags — флаг завершения работы, может принимать следущие значения:
EWX_LOGOFF завершает сессию текущего пользователя.
EWX_POWEROFF выключает питание компьютера(компьютер должен поддерживать данную функцию).
EWX_REBOOT перезагружает систему.
EWX_SHUTDOWN завершает работу комьпьютера до того места, где он может быть безопасно выключен: сброшенны все файловые буферы на диск, завершает работу всех процессов.
dwReserved —Зарезирвированно для последующих нужд, параметр игнорируется.
Не ноль если всё прошло успешно
Остальные примеры смотри в описании первой функции.
Вышеописанные примеры действительны только для w9x/Me.
Дело в том, что, чтобы выполнить функциию в NT ОС, нужно получить права на выполнение этой функции. Сделать это можно через AdjustTokenPriviligies.
С помощью нижеприведённой функции можно получить любую привелегию, в т.ч. и привеленгию SeShutdownPrivilege, которая нужна для разрешения функции ExitWindows(Ex)
Function SetPrivilege(aPrivilegeName: String ; aEnabled: Boolean ): Boolean;
OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, @Token );
IF LookupPrivilegeValue( nil ,PChar(aPrivilegeName),TP.Privileges[ 0 ].LUID )) then
IF aEnabled then TP.Privileges[ 0 ].Attributes:=SE_PRIVILEGE_ENABLED
else TP.Privileges[ 0 ].Attributes:= 0 ;
Пример использования для среды NT:
SetPrivilege( ‘SeShutdownPrivilege’ ,True);
Добавить комментарий
Не использовать не нормативную лексику.
Просьба писать ваши замечания, наблюдения и все остальное,
что поможет улучшить предоставляемую информацию на этом сайте.
ВСЕ КОММЕНТАРИИ МОДЕРИРУЮТСЯ ВРУЧНУЮ, ТАК ЧТО СПАМИТЬ БЕСПОЛЕЗНО!
Выключение пк
подскажите как выключить пк при нажатии на кнопку ? Но чтоб при выключении все окна открытые в Windows закрывались так чтоб окна сохраняли свои данные
Выключение перезагрузка
Как сделать выключение и перезагрузку с завершением всех программ Чтобы не выскакиволо это.
Выключение программы
Добрый день. Есть программа, с помощью которой операционисты подключаются к телефонной станции.
выключение компьютера
Подскажите пожалуйста как сделать выключение компьютера после завершении работы программы? Тоесть .
Выключение компа.
Подскажите, что надо написать в обработчике событий OnClick, чтобы при нажатии на кнопку вырубался.
так работает но ждать надо 1 минуту а как сделать чтоб сразу выключался без ожидания и не ждал закрытия всех окон
Gudzik11, ЩАс проверю!
Добавлено через 2 минуты
Вот держи!
Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь или здесь.
Выключение ПК программно
Тут вот такая штука. мне нужно собрать воедино куски одной простенькой задачки. Задумка вот.
Выключение компьютера
Здравствуйте, мне нужно чтоб программа выключала компьютер в час ночи, и чтобы его или нельзя было.
Перезагрузка\выключение компьютера
Уважаемые форумчане. Срочно нужна прога которая перезагружает или выключает комп по наступлении.
Время выключение компьютера
Нашел на мсдн GetSystemMetrics(SM_SHUTTINGDOWN). Решил попробовать. Но что-то пошло не так. .