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

Вниз

Уважаемые мастера помогите с выключение компьютера под WinXP   Найти похожие ветки 

 
Дмитрий С. ©   (2003-02-14 23:44) [0]

Во время исполнения следующего кода:

if AdjustTokenPrivileges(hToken, False, tkp, 0, nil, ReturnLength)then
ExitWindowsEx(EWX_SHUTDOWN or EWX_POWEROFF, 0);


выдает ошибку:

[Error]: There is no overloaded version of "AdjustTokenPrivileges" that can be called with these arguments

Что не так делаю?
Плизз!!!


 
xfrost ©   (2003-02-16 23:07) [1]

Короче я не знаю как у тебя но у мня следующая фишка работает, я сам долго с этимм маялся.
С начала определи версию винды
function TmainForm.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 98";
VER_PLATFORM_WIN32_NT : OSName := "Windows NT";
end; // case dwPlatformId
Result := OSName + " Version " + IntToStr( dwMajorVersion ) + "." + IntToStr( dwMinorVersion ) ;
end; // with VersionInfo
end // if GetVersionEx
else
Result := "Версия не определена";
end;

затем выбираем тип вырубания
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_POWEROFF , 0 ); // if OSVersion = "Windows NT"
end
else
begin // just shut the machine down
ExitWindowsEx( EWX_SHUTDOWN or EWX_FORCE , 0 ); // if OSVersion = "Windows 98"
end; // else
end;

Весь прикол (по крайней мере у меня) в том что бы использовать только POWEROFF



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

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

Наверх




Память: 0.48 MB
Время: 0.016 c
14-30557
kofman
2003-03-19 14:45
2003.04.10
Баннерные сети для Adware-программ


7-30621
vladimirS
2003-02-17 09:12
2003.04.10
Как считать последние 30 символов из файла?


3-30302
Солер
2003-03-23 09:21
2003.04.10
Зехер у ADO или у меня


14-30537
Tornado
2003-03-24 09:12
2003.04.10
Что за библиотека KERNEL32.DLL ?


14-30553
Dmytro
2003-03-24 17:37
2003.04.10
Сom - компоненты, где взять?