Добро пожаловать! Это — архивная версия форумов на «Хакер.Ru». Она работает в режиме read-only.
 

Вопрос по delphi...

Пользователи, просматривающие топик: none

Зашли как: Guest
Все форумы >> [Компилируемые языки] >> Вопрос по delphi...
Имя
Сообщение << Старые топики   Новые топики >>
Вопрос по delphi... - 2010-03-09 20:52:12.740000   
geoanton1

Сообщений: 172
Оценки: 0
Присоединился: 2008-10-19 11:16:40.693333
как организовать выключение компьютера с удалением программы которая вырубит комп?
Post #: 1
RE: Вопрос по delphi... - 2010-03-09 23:38:11.650000   
КОРОБОК

Сообщений: 41
Оценки: 0
Присоединился: 2010-03-08 13:44:46.203333
Можно и без средств delphi.

Хватит и небольшого .bat
Post #: 2
RE: Вопрос по delphi... - 2010-03-10 08:37:39.106666   
Zmaster

Сообщений: 930
Оценки: 0
Присоединился: 2007-02-09 19:02:43.500000
quote:

как организовать выключение компьютера с удалением программы которая вырубит комп?

Юзай ExitWindowEx() + получение привилегий (конкретно SeShutdownPrivilege).

quote:

Хватит и небольшого .bat

Юзай:

Post #: 3
RE: Вопрос по delphi... - 2010-03-20 10:30:19.070000   
Stil Free 2

Сообщений: 183
Оценки: 0
Присоединился: 2009-03-26 17:17:38.296666
Ну или…
Формируем батничек
quote:

procedure DeleteEXE;
const
SelfDelName = 'SelfDel.bat'; //полный путь к bat-файлу
var
F: TextFile;
FileName, Temp: string;
begin
Temp := StrToOEM(Application.ExeName); //переводим кодировку пути к файлу программы
FileName := SelfDelName; //путь к bat файлу
AssignFile(F, FileName);
Rewrite(F);
Writeln(F, ':try'); //формирование bat файла
Writeln(F, 'del "' + Temp + '"');
Writeln(F, 'if exist "' + Temp + '" goto try');
Writeln(F, 'del "' + StrToOEM(SelfDelName) + '"');
CloseFile(F);
Winexec(Pchar(FileName), sw_hide); //запуск bat файла
end;

И вырубаем:
quote:

procedure shutdown;
const
SE_SHUTDOWN_NAME = 'SeShutdownPrivilege'; // Borland forgot this declaration
var
hToken : THandle;
tkp : TTokenPrivileges;
tkpo : TTokenPrivileges;
zero : DWORD;
begin
if Pos( 'Windows NT', OSVersion ) = 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_FORCE or EWX_SHUTDOWN, 0 );
end // if OSVersion = 'Windows NT'
else
begin // just shut the machine down
ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN, 0 );
end; // else
end;

Чёт длинновато вышло=\
Post #: 4
RE: Вопрос по delphi... - 2010-03-22 11:55:11.990000   
FLIER

Сообщений: 628
Оценки: 0
Присоединился: 2007-08-29 01:31:15.400000
quote:

ORIGINAL: Stil Free 2
Чёт длинновато вышло=\

Ага
quote:


shutdown -s
del %0


 Этого достаточно…
Post #: 5
Страниц:  [1]
Все форумы >> [Компилируемые языки] >> Вопрос по delphi...







Связаться:
Вопросы по сайту / xakep@glc.ru

Предупреждение: использование полученных знаний в противозаконных целях преследуется по закону.