Форум: "Начинающим";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
ВнизПерезагрузка компьютера Найти похожие ветки
← →
Биритм (2007-01-11 21:26) [0]Подскажите есть ли такая функция которая перезагружалабы компьютер
← →
tesseract © (2007-01-11 21:49) [1]ExitWindowsEx(EWX_SHUTDOWN,EWX_FORCE)
← →
kaZaNoVa © (2007-01-11 22:39) [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;
← →
Anatoly Podgoretsky © (2007-01-11 22:52) [3]> kaZaNoVa (11.01.2007 22:39:02) [2]
Откуда этот вечно кривой код, уже сколько раз встречаю, с данным примером система не перезагрузится и список флагов не полный.
← →
Zorro2001 © (2007-01-12 03:22) [4]Я просто сделал dll что бы не переписывать весь код когда он понадобится...
library SysDll;
uses
Windows,
Messages,
SysUtils,
Variants,
Classes,
Graphics,
Controls,
Forms,
Dialogs,
StdCtrls;
{$R *.res}
function SetPrivilege(privilegeName:string; enable: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(privilegeName), tp.Privileges[0].LUID)
then
begin
if enable 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(flags:integer):boolean;
begin
if SetPrivilege("SeShutdownPrivilege",True) then
begin
ExitWindowsEx(flags,1);
SetPrivilege("SeShutdownPrivilege", False)
end;
end;
exports WinExit;
End.
Потом в программе из которой хочеш перегрузить машину, вызываеш функцию WinExit с нужным тебе параметром.
← →
Zorro2001 © (2007-01-12 03:28) [5]например так
WinExit(EWX_SHUTDOWN)
← →
novill © (2007-01-12 09:26) [6]> [3] Anatoly Podgoretsky © (11.01.07 22:52)
> Откуда этот вечно кривой код,
http://delphiworld.narod.ru/
← →
Anatoly Podgoretsky © (2007-01-12 14:05) [7]> novill (12.01.2007 09:26:06) [6]
А тогда понятно, код гнилой.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2007.01.28;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.047 c