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

Вниз

ShutDoun в win 2000   Найти похожие ветки 

 
Герасимов   (2003-02-06 23:04) [0]

Уважаемые мастера столкнулся с такой проблемой. моя прога по команде выключает компьютер в 98 все ОК , а в 2000 беда : все отрубается только в конце пишет "Теперь питание компьютера можно отключить" , хотя сама винда его вырубает. Не подскажите что за беда и как с ней бороться.
Программа сначала определяет версию win потом уже отрубает для 2000 примерно так:
procedure TMainForm.ShutDown;
const
SE_SHUTDOWN_NAME = "SeShutdownPrivilege"; // Borland forgot this declaration
var
hToken : THandle;
tkp : TTokenPrivileges;
tkpo : TTokenPrivileges;
zero : DWORD;
begin
if Pos( "Windows NT", GetWinVersion) = 1 then // we"ve got to do a whole buch of things
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)
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)


// SE_SHUTDOWN_NAME
if not LookupPrivilegeValue( nil, "SeShutdownPrivilege" , tkp.Privileges[ 0 ].Luid ) then
begin
MessageBox( 0, "Exit Error", "LookupPrivilegeValue() Failed", MB_OK );
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
MessageBox( 0, "Exit Error", "AdjustTokenPrivileges() Failed", MB_OK );
Exit;
end // if Boolean( GetLastError() )
else
ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN, 0 );
end // if OSVersion = "Windows NT"
else
begin // just shut the machine down
ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN, 0 );
end; // else
end;
Может здесь что не так?


 
Михайлов Антон   (2003-02-08 17:56) [1]

http://delphi.mastak.com/cgi-bin/forum.pl?look=1&id=1044707432&n=2


 
xfrost   (2003-02-13 21:50) [2]

Все я врубился вместо ShutDown надо было вставить PowerOff и как я сам не догадался про третий вариант....



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

Форум: "Система";
Текущий архив: 2003.04.07;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.44 MB
Время: 0.009 c
3-19510
Наташа
2003-03-17 08:51
2003.04.07
Типы в IB


14-19775
DeMoN-777
2003-03-21 16:30
2003.04.07
Cgi


1-19653
___ALex___
2003-03-25 20:56
2003.04.07
For gruener


6-19732
Vampire
2003-02-11 18:51
2003.04.07
Перекачка


1-19608
_Split_
2003-03-28 20:15
2003.04.07
Эффекты при открытии формы.





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