Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Основная";
Текущий архив: 2003.11.13;
Скачать: [xml.tar.bz2];

Вниз

Почему 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;
Скачать: [xml.tar.bz2];

Наверх




Память: 0.45 MB
Время: 0.931 c
1-41605
LastLamer
2003-10-26 23:00
2003.11.13
перехват изменения свойства объекта


14-41944
AAA3AAA
2003-10-20 14:13
2003.11.13
как деньги продавцу в штаты заслать?


14-42065
VEG
2003-10-17 17:34
2003.11.13
Что для вас является самым ценным в компьютере?


1-41143
Виктор
2003-11-03 11:34
2003.11.13
Свой CodeInsight


1-41491
P0tia
2003-10-28 15:18
2003.11.13
Значок при перетаскивании





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский