Выключение Windows

Модераторы: Duncon, Naeel Maqsudov, Игорь Акопян, Хыиуду

Ответить
Yura_ua
Сообщения: 63
Зарегистрирован: 07 дек 2006, 17:52

Здравствуйте! Подскажите пожалуйста, как можно заставить систему ПРАВИЛЬНО выключится при событии onTimer?
Аватара пользователя
demon416
Сообщения: 178
Зарегистрирован: 30 янв 2006, 14:03
Откуда: kirovskoe

а что подразумевается под правильно?
Аватара пользователя
Duncon
Сообщения: 2085
Зарегистрирован: 10 окт 2004, 14:11
Откуда: Питер
Контактная информация:

В поиск .
Yura_ua
Сообщения: 63
Зарегистрирован: 07 дек 2006, 17:52

demon416 писал(а):а что подразумевается под правильно?

Сохранение параметров, завершение работы програм...
MOTOCoder
Сообщения: 548
Зарегистрирован: 14 янв 2008, 20:27
Откуда: Россия, Псков

Можно так, должно сработать на любой версии Windows:
[syntax='Delphi']
uses
SysUtils,
Windows;

const
SE_SHUTDOWN_NAME='SeShutdownPrivilege';
var
hToken: THandle;
tkp: TTokenPrivileges;
tkpo: TTokenPrivileges;
zero: DWORD;
OSName: string;

function myGetVersion: String;
var
VersionInfo: TOSVersionInfo;
begin
VersionInfo.dwOSVersionInfoSize:=SizeOf(TOSVersionInfo);
if Windows.GetVersionEx(VersionInfo)
then
begin
with VersionInfo do
begin
case dwPlatformId of
VER_PLATFORM_WIN32s : OSName:='Win32s';
VER_PLATFORM_WIN32_WINDOWS: OSName:='Windows 95';
VER_PLATFORM_WIN32_NT : OSName:='Windows NT';
end;
Result:=OSName+' Version '+IntToStr(dwMajorVersion)+'.'+IntToStr(dwMinorVersion)+
#13#10' (Build '+IntToStr(dwBuildNumber)+': '+szCSDVersion+')';
end;
end
else Result:='';
end;

begin
if Pos('Windows NT', MyGetVersion)=1
then
begin
zero:=0;
if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)
then
begin
Exit;
end;
if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)
then
begin
Exit;
end; // if not OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken)
if not LookupPrivilegeValue(nil, 'SeShutdownPrivilege' , tkp.Privileges[ 0 ].Luid)
then
begin
Exit;
end; // if not LookupPrivilegeValue(nil, 'SeShutdownPrivilege' , tkp.Privileges[0].Luid )
tkp.PrivilegeCount:=1;
tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges(hToken, False, tkp, SizeOf(TTokenPrivileges ), tkpo, zero);
if Boolean(GetLastError())
then
begin
Exit;
end
else
begin
ExitWindowsEx(EWX_Force or EWX_SHUTDOWN, 0);
end;
end
else
begin
ExitWindowsEx(EWX_Force or EWX_SHUTDOWN, 0);
end;
end.
[/syntax]
Ни что так не ограничивает фантазию программиста, как компилятор...
Ответить