Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2003.11.13;
Скачать: CL | DM;

Вниз

Почему Windows всё-таки не завершает работу   Найти похожие ветки 

 
VID ©   (2003-11-02 14:22) [0]

Почему процедура Procedure ShutDownWindows не завершает корректно работу windows 2000, а лишь приводит к появлению на экране сообщения, что "теперь питание компа можно выключить" ?
Причём при стандартном, "ручном" завершении работы виндовз это сообщение не появляется, и комп нормально выключается. Также и программа FlashGet которая предусматривает возможность автоматического завершения работы ОС, при завершении закачки, тоже умеет нормально выключать комп.

Что за проблема тогда с процедурой ShutDownWindows ?


function GetWinVersion: String;
var VersionInfo : TOSVersionInfo;
OSName : String;
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;

Procedure ShutDownWindows;
//Завершение работы Windows {Эту функцию лучше вызывать по таймеру через каждую секунду}
const SE_SHUTDOWN_NAME = "SeShutdownPrivilege";
var hToken : THandle;
tkp : TTokenPrivileges;
tkpo : TTokenPrivileges;
zero : DWORD;
begin
if Pos( "Windows NT", GetWinVersion) = 1 then
begin
zero := 0;
if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
begin
MessageBox( 0, "Exit Error", "OpenProcessToken() Failed", MB_OK );
Exit;
end;
if not OpenProcessToken( GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then
begin
MessageBox( 0, "Exit Error", "OpenProcessToken() Failed", MB_OK );
Exit;
end;
if not LookupPrivilegeValue( nil, "SeShutdownPrivilege" , tkp.Privileges[ 0 ].Luid ) then
begin
MessageBox( 0, "Exit Error", "LookupPrivilegeValue() Failed", MB_OK );
Exit;
end;
tkp.PrivilegeCount := 1;
tkp.Privileges[ 0 ].Attributes := SE_PRIVILEGE_ENABLED;
AdjustTokenPrivileges( hToken, False, tkp, SizeOf( TTokenPrivileges ), tkpo, zero );
if Boolean( GetLastError() ) then
begin
MessageBox( 0, "Exit Error", "AdjustTokenPrivileges() Failed", MB_OK );
Exit;
end else ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN, 0 );
end else ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN, 0 );
end;


 
Anatoly Podgoretsky ©   (2003-11-02 14:28) [1]

А где у тебя EWX_POWEROFF?
Смотри статью http://podgoretsky.com/ftp/Language/nps/ru.delphi.html#N162



Страницы: 1 вся ветка

Текущий архив: 2003.11.13;
Скачать: CL | DM;

Наверх




Память: 0.47 MB
Время: 0.025 c
3-40950
ZHK
2003-10-17 13:39
2003.11.13
А почему?


4-42314
Алексей Петухов
2003-09-05 12:10
2003.11.13
Прозрачные окошки


14-42028
Johnny Smith
2003-10-16 10:58
2003.11.13
Только что прислали. Не могу не поделиться...


1-41245
Delphian
2003-11-04 18:01
2003.11.13
Не могу создать объект класса TFileStream в конструкторе класса


14-42131
Nelud
2003-10-14 20:31
2003.11.13
Псевдо-двоичная система счисления