Форум: "WinAPI";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];
ВнизКак в 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 вся ветка
Форум: "WinAPI";
Текущий архив: 2004.08.15;
Скачать: [xml.tar.bz2];
Память: 0.45 MB
Время: 0.035 c