Главная страница
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.056 c
14-41940
fool
2003-10-20 17:08
2003.11.13
MSSQL 7.0: непонятные тормоза


3-40791
Митяй
2003-10-22 15:15
2003.11.13
БД не сохраняет записи?????


4-42285
Max_
2003-09-11 11:00
2003.11.13
Использование Ram? (Memory usage)


3-41106
Саня
2003-10-21 07:08
2003.11.13
Скорость открытия таблицы (запроса).


1-41303
Vadim S
2003-10-23 12:10
2003.11.13
Округление? Round() кто как делает?