![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Перезагрузка компьютера [D7, XP]
Биритм © (2007-01-11 21:26:00)Подскажите есть ли такая функция которая перезагружалабы компьютер
Anatoly Podgoretsky (2007-01-12 14:05:00) [1]> novill (12.01.2007 09:26:06) [6]
А тогда понятно, код гнилой.
novill (2007-01-12 09:26:00) [2]> [3] Anatoly Podgoretsky © (11.01.07 22:52)
> Откуда этот вечно кривой код,
http://delphiworld.narod.ru/
Zorro2001 (2007-01-12 03:28:00) [3]например так
WinExit(EWX_SHUTDOWN)
Zorro2001 (2007-01-12 03:22:00) [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 с нужным тебе параметром.
Anatoly Podgoretsky (2007-01-11 22:52:00) [5]> kaZaNoVa (11.01.2007 22:39:02) [2]
Откуда этот вечно кривой код, уже сколько раз встречаю, с данным примером система не перезагрузится и список флагов не полный.
kaZaNoVa (2007-01-11 22:39:00) [6]
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;
tesseract (2007-01-11 21:49:00) [7]ExitWindowsEx(EWX_SHUTDOWN,EWX_FORCE)