|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
|
|
Опции темы | Поиск в этой теме |
08.11.2006, 22:24 | #1 |
Пользователь
Регистрация: 08.11.2006
Сообщений: 25
|
выключение компьютера
Как можно вырубить компьютер в Console Application?
Или как можно прочитать то, что ввели в окошко воода? *я учусь 1ую неделю прогать Делфи, умею только с консолью обращаться* readln не помогает, что делать? |
09.11.2006, 06:47 | #2 |
Регистрация: 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; |
09.11.2006, 06:54 | #3 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
В нужное событие (нажати на кнопку например) напиши: ExitWindowsEx( EWX_FORCE or EWX_SHUTDOWN, 0 );
|
09.11.2006, 20:26 | #4 | |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
Цитата:
где то я видел вот 99,99% рабочий код Код:
|
|
10.11.2006, 10:05 | #5 |
Пользователь
Регистрация: 08.11.2006
Сообщений: 25
|
Написал я программу.
http://www.filefactory.com/file/292847/ |
10.11.2006, 16:48 | #6 |
Пользователь
Регистрация: 08.11.2006
Сообщений: 25
|
как сделать ее запуск с виндой вместе и запрет на удаление?
|
10.11.2006, 17:27 | #7 |
Павел Сергеевич
Форумчанин
Регистрация: 05.11.2006
Сообщений: 665
|
Кидай ее в авторан в реестре - вот тебе и автозапуск. А вот насчет запрета удаления - не знаю.... Но самый лучший способ "прикрыть" твое творение - назвать как-нибудь по неприглядней: svchosl, winlogan, lsas. можно конечно создать вторую програмку, которая при обнаружении убитого процесса первой программы ее вновь запускала, и наоборот в программу вписать код, который при обнаружении убитого процесса восстанавливающей программы ее бы восстанавливал... Или ставить Hook'и.
Познавая других, мы познаем себя.
С'est la vie... |
10.11.2006, 18:01 | #8 |
Delphi/C++/C#
Участник клуба
Регистрация: 29.10.2006
Сообщений: 1,972
|
Почитай эту тему: http://www.programmersforum.ru/showthread.php?t=18
|
10.11.2006, 20:32 | #9 |
добрый няша
Старожил
Регистрация: 29.10.2006
Сообщений: 4,804
|
что то вирусописанием попахивает.........
|
10.11.2006, 20:37 | #10 |
Павел Сергеевич
Форумчанин
Регистрация: 05.11.2006
Сообщений: 665
|
Да лан те, мож парень приколюху какую делает. Сам посуди. ежлиб он вирусописанием занимался, стал бы он такие вопросы задавать?
P.S. Твоя мессага 1000-я на форуме!!!!
Познавая других, мы познаем себя.
С'est la vie... |
|
Похожие темы | ||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Выключение компьютера | 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 |