Главная страница
    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.034 c
1-41702
A-DiL
2003-11-03 22:26
2003.11.13
Решение системы линейных уравнений


1-41135
Артем
2003-11-04 07:56
2003.11.13
Ошибка при переходе на другую форму


3-41074
alexsc
2003-10-23 17:31
2003.11.13
вопрос


1-41400
nazar
2003-10-30 00:26
2003.11.13
Подкажите installer который б мог инсталлировать IDAPI 2.5


6-41863
Maxim Volobuev
2003-09-06 18:38
2003.11.13
WebBrowser и Socks прокси





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
Английский Французский Немецкий Итальянский Португальский Русский Испанский