Страница 1 из 1

Выключение Windows

Добавлено: 02 авг 2008, 16:13
Yura_ua
Здравствуйте! Подскажите пожалуйста, как можно заставить систему ПРАВИЛЬНО выключится при событии onTimer?

Re: Выключение Windows

Добавлено: 02 авг 2008, 17:09
demon416
а что подразумевается под правильно?

Re: Выключение Windows

Добавлено: 03 авг 2008, 09:47
Duncon
В поиск .

Re: Выключение Windows

Добавлено: 04 авг 2008, 13:46
Yura_ua
demon416 писал(а):а что подразумевается под правильно?

Сохранение параметров, завершение работы програм...

Re: Выключение Windows

Добавлено: 04 авг 2008, 21:25
MOTOCoder
Можно так, должно сработать на любой версии 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]

Re: Выключение Windows

Добавлено: 05 авг 2008, 09:01
airyashov