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

Вниз

Как в XP выключить комп???   Найти похожие ветки 

 
beetlehead   (2004-07-04 16:24) [0]

Вопрос в принципе вот в чем. Если использовать ExitWindowsEx, то происходит просто завершение сеанса. Думаю дело в том, чтобы поднять приоритет. Пишу следующее:

procedure ShutdownMyBestLovedComp;
var   hToken,p,o: cardinal;
     tkp: TOKEN_PRIVILEGES;
     SE_SHUTDOWN_NAME:PAnsiChar;
begin
   OpenProcessToken(GetCurrentProcess(),TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY,hToken);
   LookupPrivilegeValue(NIL, SE_SHUTDOWN_NAME,tkp.Privileges[0].Luid);

   p:=0;  o:=0;
   tkp.PrivilegeCount:=1;
   tkp.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED;
   AdjustTokenPrivileges(hToken,false,tkp,p,PTokenPrivileges(0),o);

   ExitWindowsEx(EWX_POWEROFF,0);
end;

Просто этот код переписывал из сишного. Возникает проблемма со строчкой AdjustTokenPrivileges(hToken,false,tkp,p,PTokenPrivileges(0),o);
Еррора такая, что компилятор не знает какую из перезагруженных версий загружать по введенным параметрам.
В С++ все пахало, а здесь не хотит. Вся проблемма в этой строчке.
P.S. Если просто оставить одну строчку ExitWindowsEx(EWX_POWEROFF,0) и изменить в свойствах проги, на эмуляцию 98 винды, то комп выключается с сообщением "ТЕПЕРЬ ПИТАНИЕ КОМПЬЮТЕРА МОЖНО ВЫКЛЮЧИТЬ"
Заранее спасибо всем кто откликнулся, если таковые будут :)


 
GrayFace ©   (2004-07-05 07:28) [1]

ExitWindowsEx(EWX_POWEROFF or EWX_SHUTDOWN,0);

>PTokenPrivileges(0)
Лучше подавай nil. Но вообще проблем с выбором версии тут не должно быть. У тебя такое сообщение:"Ambigous overloaded call to "AdjustTokenPrivileges""?


 
Vetek ©   (2004-07-05 12:24) [2]

function SetPrivilege(aPrivilegeName : string;
                     aEnabled : boolean ): boolean;
var
 TPPrev,
 TP         : TTokenPrivileges;
 Token      : THandle;
 dwRetLen   : DWord;
begin
 Result := False;
 OpenProcessToken(GetCurrentProcess,TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, Token );

 TP.PrivilegeCount := 1;
 if( LookupPrivilegeValue(nil, PChar( aPrivilegeName ),
                          TP.Privileges[ 0 ].LUID ) ) then
 begin
   if( aEnabled )then
     TP.Privileges[0].Attributes:= SE_PRIVILEGE_ENABLED
   else
     TP.Privileges[0].Attributes:= 0;

   dwRetLen := 0;
   Result := AdjustTokenPrivileges(Token,False,TP,
                                   SizeOf( TPPrev ),
                                   TPPrev,dwRetLen );
 end;

 CloseHandle( Token );
end;

function WinExit( iFlags : integer ) : boolean;
//   возможные флаги:
//   EWX_LOGOFF
//   EWX_REBOOT
//   EWX_SHUTDOWN
begin
 Result := True;
 if( SetPrivilege( "SeShutdownPrivilege", true ) ) then
 begin
   if( not ExitWindowsEx( iFlags, 0 ) )then
   begin
     Result := False;
   end;
   SetPrivilege( "SeShutdownPrivilege", False )
 end
 else
 begin
   Result := False;
 end;
end;
procedure TForm1.Button1Click(Sender: TObject);
begin
WinExit(EWX_REBOOT);
end;



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

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

Наверх




Память: 0.47 MB
Время: 0.041 c
14-1091033833
Art_Z
2004-07-28 20:57
2004.08.15
Хочу книгу по железу!


14-1091105370
max1000
2004-07-29 16:49
2004.08.15
HELP!!!!!!!! У меня есть serv name_dir file_name А МНЕ НАДО C:


1-1091529095
V l a d i m i r
2004-08-03 14:31
2004.08.15
Поиск в предложении по комбинации букв


11-1078653027
Nils
2004-03-07 12:50
2004.08.15
Incopatible types: TKOLStGrd and PStGrd - что делать???


8-1086191581
Diver
2004-06-02 19:53
2004.08.15
Работа с графикой