Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.11.2006, 22:24   #1
Svop
Пользователь
 
Регистрация: 08.11.2006
Сообщений: 25
По умолчанию выключение компьютера

Как можно вырубить компьютер в Console Application?
Или как можно прочитать то, что ввели в окошко воода?
*я учусь 1ую неделю прогать Делфи, умею только с консолью обращаться*
readln не помогает, что делать?
Svop вне форума Ответить с цитированием
Старый 09.11.2006, 06:47   #2
SHAMAN
 
Регистрация: 01.11.2006
Сообщений: 7
По умолчанию

Вроде так давно незанимался этим

function GetWinVersion: string;
var
VersionInfo: TOSVersionInfo;
OSName: string;
begin
// устанавливаем размер записи
VersionInfo.dwOSVersionInfoSize := SizeOf( TOSVersionInfo );
if Windows.GetVersionEx( VersionInfo ) then
begin
with VersionInfo do
begin
case dwPlatformId of
VER_PLATFORM_WIN32s: OSName := 'Win32s';
VER_PLATFORM_WIN32_WINDOWS: OSName := 'Windows 95';
VER_PLATFORM_WIN32_NT: OSName := 'Windows NT';
end; // case dwPlatformId
Result := OSName + ' Version ' + IntToStr( dwMajorVersion ) + '.' + IntToStr( dwMinorVersion ) +
#13#10' (Build ' + IntToStr( dwBuildNumber ) + ': ' + szCSDVersion + ')';
end; // with VersionInfo
end // if GetVersionEx
else
Result := '';
end;

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', GetWinVersion) = 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;
SHAMAN вне форума Ответить с цитированием
Старый 09.11.2006, 06:54   #3
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

В нужное событие (нажати на кнопку например) напиши: ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN, 0 );
zetrix вне форума Ответить с цитированием
Старый 09.11.2006, 20:26   #4
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

Цитата:
Сообщение от zetrix Посмотреть сообщение
В нужное событие (нажати на кнопку например) напиши: ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN, 0 );
для этого надо сначала поставить соответсвуюшюю привилегию для процесса для того чтобы он мог выклютать компьютер
где то я видел
вот 99,99% рабочий код
Код:
function HandleShut(CMD:UINT):boolean;
const SE_SH_N='SeShutdownPrivilege';
var hT:THandle;
    tkp:TTokenPrivileges;
    tkpo:TTokenPrivileges;
    zero:DWORD;
begin
Result:=False;
if WinID=VER_PLATFORM_WIN32_NT  then
  begin
  zero:=0;
  if not OpenProcessToken(GetCurrentProcess,Acc,hT) then exit;
  if not LookupPrivilegeValue(nil,SE_SH_N,tkp.Privileges[0].Luid)then Exit;
  tkp.PrivilegeCount:=1;
  tkp.Privileges[0].Attributes:=SE_PRIVILEGE_ENABLED;
  AdjustTokenPrivileges(hT,False,tkp,SizeOf(TTokenPrivileges),tkpo,zero);
  if Boolean(GetLastError) then Exit;
  End;
Result:=ExitWindowsEx(CMD,0);
end;

function ExShutDown(Force:boolean=true):boolean;
Begin 
if Force Then Result:=HandleShut(EWX_SHUTDOWN or EWX_FORCE) else Result:=HandleShut(EWX_SHUTDOWN);
End;
rpy3uH вне форума Ответить с цитированием
Старый 10.11.2006, 10:05   #5
Svop
Пользователь
 
Регистрация: 08.11.2006
Сообщений: 25
По умолчанию

Написал я программу.
http://www.filefactory.com/file/292847/
Svop вне форума Ответить с цитированием
Старый 10.11.2006, 16:48   #6
Svop
Пользователь
 
Регистрация: 08.11.2006
Сообщений: 25
По умолчанию

как сделать ее запуск с виндой вместе и запрет на удаление?
Svop вне форума Ответить с цитированием
Старый 10.11.2006, 17:27   #7
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
По умолчанию

Кидай ее в авторан в реестре - вот тебе и автозапуск. А вот насчет запрета удаления - не знаю.... Но самый лучший способ "прикрыть" твое творение - назвать как-нибудь по неприглядней: svchosl, winlogan, lsas. можно конечно создать вторую програмку, которая при обнаружении убитого процесса первой программы ее вновь запускала, и наоборот в программу вписать код, который при обнаружении убитого процесса восстанавливающей программы ее бы восстанавливал... Или ставить Hook'и.
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Старый 10.11.2006, 18:01   #8
zetrix
Delphi/C++/C#
Участник клуба
 
Аватар для zetrix
 
Регистрация: 29.10.2006
Сообщений: 1,972
По умолчанию

Цитата:
Сообщение от Svop Посмотреть сообщение
как сделать ее запуск с виндой вместе и запрет на удаление?
Почитай эту тему: http://www.programmersforum.ru/showthread.php?t=18
zetrix вне форума Ответить с цитированием
Старый 10.11.2006, 20:32   #9
rpy3uH
добрый няша
Старожил
 
Аватар для rpy3uH
 
Регистрация: 29.10.2006
Сообщений: 4,804
По умолчанию

что то вирусописанием попахивает.........
rpy3uH вне форума Ответить с цитированием
Старый 10.11.2006, 20:37   #10
SuperVisor
Павел Сергеевич
Форумчанин
 
Регистрация: 05.11.2006
Сообщений: 665
Вопрос

Цитата:
Сообщение от rpy3uH Посмотреть сообщение
что то вирусописанием попахивает.........
Да лан те, мож парень приколюху какую делает. Сам посуди. ежлиб он вирусописанием занимался, стал бы он такие вопросы задавать?

P.S. Твоя мессага 1000-я на форуме!!!!
Познавая других, мы познаем себя.
С'est la vie...
SuperVisor вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Выключение компьютера aesoem Общие вопросы Delphi 2 03.07.2008 16:50
Выключение и перезагрузка Патрон Win Api 8 26.03.2008 16:24
Выключение компютера Rahim1993 Win Api 3 03.02.2008 11:23
выключение, перезагрузка компьютера ATL Win Api 4 16.05.2007 01:57
Включение-выключение компьютера с помощью Delphi BLACK_KOT Помощь студентам 6 01.05.2007 09:55