| Другое > Hard'n'Soft |
| Как вернуть кнопку выключения компьютера? |
| (1/1) |
| virf:
Пропала кнопка выключения компьютера. Скорее всего причиной является заценивание мной примеров программ с диска, прилагаемого к книге М. Фленова "Программирование на C++ глазами хакера". Диспетчер задач не запускается, при нажатии Ctrl+Alt+Delete появляется ошибка "Диспетчер задач отключен администратором". Также не запускается Win+R, пишет "Операция отменена вследствие действующих для компьютера ограничений. Обратитесь к администратору сети." Перезагрузка не помогает. Что делать? |
| Йобан Матич:
Пользоваться VMware Workstation =) Попробуй под администратором войти в виндовс. ЗЫ: кинь мне папку DEMO с этого диска, а то у меня книга в электронном виде. |
| virf:
Держи ссылку в PM. Если у тебя установлен VMware Workstation объясни плиз че там сделать нужно, я в английском не силён. |
| Йобан Матич:
ZufuS, А чт оона так много весит? Про VMware Workstation чуть позже напишу.. |
| virf:
--- Цитата: Йобан Матич ---ZufuS, А чт оона так много весит? --- Конец цитаты --- хз, я вроде ниче не добавлял, че не будешь качать? |
| Йобан Матич:
не... я со своим 2р за метр не осилю... дороо... =( Кста лучше сделй так: создай текстовый документ со строкой TREE /F DEMO > OUT.TXT сохрани его с расширением bat в той же папке что и папка demo и кликни по нему. полученный out.txt мне пришли, я выберу оттуда то что нужно. ЗЫ : выложи ссылки на архив на всеобщее оборзение, может кому ещё пригодится. |
| NecRomantic:
Это пластмассовую такую что ли? Внизу на корпусе? 8) |
| Mortal Hero:
--- Цитата: ZufuS ---Пропала кнопка выключения компьютера. Скорее всего причиной является заценивание мной примеров программ с диска, прилагаемого к книге М. Фленова "Программирование на C++ глазами хакера". Диспетчер задач не запускается, при нажатии Ctrl+Alt+Delete появляется ошибка "Диспетчер задач отключен администратором". Также не запускается Win+R, пишет "Операция отменена вследствие действующих для компьютера ограничений. Обратитесь к администратору сети." Перезагрузка не помогает. Что делать? --- Конец цитаты --- попробуй сделать восстановление системы. С другой стороны, чтобы расблокировать диспечер задач, надо кнопку вставить в корпус...тоесть тьфу в регистре кое что с 1 на 0 заменить вроде. А вообще закажи на eBay кнопку круглую, и вставь в корпус. Помогает 100 процентов! Или там, например из розетки провод выдёргивай и будет тебе выключение. |
| virf:
А как я по-твоему выключаю? Установка виндоуса поверх того, что ща стоит тоже не помогает. Может можно так установить чтобы обновилась вся системная информация, но никакие там ярлыки, программы из меню пуск и всё такое не трогалось? |
| Йобан Матич:
--- Цитата: ZufuS ---Может можно так установить чтобы обновилась вся системная информация, но никакие там ярлыки, программы из меню пуск и всё такое не трогалось? --- Конец цитаты --- копируешь в надёжное место папку documents and settings, форматишь винт, ставишь виндовс и кидаешь папку documents and settings на прежнее место. |
| virf:
Так и сделаю. Тебе в личку пришло письмо? |
| Zephyr:
ZufuS, Я не пойму чего там думать - если уверен что это из-за примеров, то в книге наверняка достаточно информации чтобы все восстановить. PS: Alt+F4 - завершает приложение виндовс. Если хочешь - можно программно выключение написать. Можешь пока юзать. Пример на Дельфи. Перегони на Си. Либо скомпилируй в Delphi 5. ********************************************************* Как выключить компьютер с любой версией Windows? Previous Top Next 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; Взято из http://forum.sources.ru -------------------------------------------------------------------------------- ExitWindowsEx(EWX_FORCE,0); или Запуск из коммандной строки rundll32 krnl386.exe,exitkernel только под XP все это работает плохо. Надо думать... Автор: Vit http://www.delphist.com http://www.drkb.ru chicago.lastplanet.com Взято с Vingrad.ru http://forum.vingrad.ru -------------------------------------------------------------------------------- exitkernel очень радикальный способ потому что не сохраняются настройки рабочего стола, ini файлы и другие установки, зато быстро Есть способ намного лучше: ф-ия SHExitWindowsEx из shell32.dll С неё всё good. Это запуск из-под WinExec() Программно же только с получением привелегии. Замечу также что флаг EWX_FORCE необходим только для принудительного завершения при выдаче каких либо сообщений или модальных окон, что воспрепятствует завершению, например, "К компьютеру подключены пользователи. Данные могут быть утярены. Вы хотите завершить работу?" или сообщение, которое автор указал в вопросе. Если нет таких сообщений EWX_FORCE не обязателен. Также есть отдельные флаги для выключение компьютера (по умолчанию - перезагрузка) или завершения сетевого сеанса. Автор: Song Взято с Vingrad.ru http://forum.vingrad.ru |
| Zephyr:
********************************************************* Еще ********************************************************* Как программно вазвать окно Завершение работы Windows? Previous Top Next SendMessage (FindWindow ('Progman', 'Program Manager'), WM_CLOSE, 0, 0); ********************************************************* еще ********************************************************* Как выключить, перезагрузить или завершить Windows? Previous Top Next {1.} function MyExitWindows(RebootParam: Longword): Boolean; var TTokenHd: THandle; TTokenPvg: TTokenPrivileges; cbtpPrevious: DWORD; rTTokenPvg: TTokenPrivileges; pcbtpPreviousRequired: DWORD; tpResult: Boolean; const SE_SHUTDOWN_NAME = 'SeShutdownPrivilege'; begin if Win32Platform = VER_PLATFORM_WIN32_NT then begin tpResult := OpenProcessToken(GetCurrentProcess(), TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, TTokenHd); if tpResult then begin tpResult := LookupPrivilegeValue(nil, SE_SHUTDOWN_NAME, TTokenPvg.Privileges[0].Luid); TTokenPvg.PrivilegeCount := 1; TTokenPvg.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; cbtpPrevious := SizeOf(rTTokenPvg); pcbtpPreviousRequired := 0; if tpResult then Windows.AdjustTokenPrivileges(TTokenHd, False, TTokenPvg, cbtpPrevious, rTTokenPvg, pcbtpPreviousRequired); end; end; Result := ExitWindowsEx(RebootParam, 0); end; // Example to shutdown Windows: procedure TForm1.Button1Click(Sender: TObject); begin MyExitWindows(EWX_POWEROFF or EWX_FORCE); end; // Example to reboot Windows: procedure TForm1.Button1Click(Sender: TObject); begin MyExitWindows(EWX_REBOOT or EWX_FORCE); end; // Parameters for MyExitWindows() {************************************************************************} {2. Console Shutdown Demo} program Shutdown; {$APPTYPE CONSOLE} uses SysUtils, Windows; // Shutdown Program // (c) 2000 NeuralAbyss Software // http://www.neuralabyss.com var logoff: Boolean = False; reboot: Boolean = False; warn: Boolean = False; downQuick: Boolean = False; cancelShutdown: Boolean = False; powerOff: Boolean = False; timeDelay: Integer = 0; function HasParam(Opt: Char): Boolean; var x: Integer; begin Result := False; for x := 1 to ParamCount do if (ParamStr(x) = '-' + opt) or (ParamStr(x) = '/' + opt) then Result := True; end; function GetErrorstring: string; var lz: Cardinal; err: array[0..512] of Char; begin lz := GetLastError; FormatMessage(FORMAT_MESSAGE_FROM_SYSTEM, nil, lz, 0, @err, 512, nil); Result := string(err); end; procedure DoShutdown; var rl, flgs: Cardinal; hToken: Cardinal; tkp: TOKEN_PRIVILEGES; begin flgs := 0; if downQuick then flgs := flgs or EWX_FORCE; if not reboot then flgs := flgs or EWX_SHUTDOWN; if reboot then flgs := flgs or EWX_REBOOT; if poweroff and (not reboot) then flgs := flgs or EWX_POWEROFF; if logoff then flgs := (flgs and (not (EWX_REBOOT or EWX_SHUTDOWN or EWX_POWEROFF))) or EWX_LOGOFF; if Win32Platform = VER_PLATFORM_WIN32_NT then begin if not OpenProcessToken(GetCurrentProcess, TOKEN_ADJUST_PRIVILEGES or TOKEN_QUERY, hToken) then Writeln('Cannot open process token. [' + GetErrorstring + ']') else begin if LookupPrivilegeValue(nil, 'SeShutdownPrivilege', tkp.Privileges[0].Luid) then begin tkp.Privileges[0].Attributes := SE_PRIVILEGE_ENABLED; tkp.PrivilegeCount := 1; AdjustTokenPrivileges(hToken, False, tkp, 0, nil, rl); if GetLastError ERROR_SUCCESS then Writeln('Error adjusting process privileges.'); end else Writeln('Cannot find privilege value. [' + GetErrorstring + ']'); end; { if CancelShutdown then if AbortSystemShutdown(nil) = False then Writeln(\'Cannot abort. [\' + GetErrorstring + \']\') else Writeln(\'Cancelled.\') else begin if InitiateSystemShutdown(nil, nil, timeDelay, downQuick, Reboot) = False then Writeln(\'Cannot go down. [\' + GetErrorstring + \']\') else Writeln(\'Shutting down!\'); end; } end; // else begin ExitWindowsEx(flgs, 0); // end; end; begin Writeln('Shutdown v0.3 for Win32 (similar to the Linux version)'); Writeln('(c) 2000 NeuralAbyss Software. All Rights Reserved.'); if HasParam('?') or (ParamCount = 0) then begin Writeln('Usage: shutdown [-akrhfnc] [-t secs]'); Writeln(' -k: do not really shutdown, only warn.'); Writeln(' -r: reboot after shutdown.'); Writeln(' -h: halt after shutdown.'); Writeln(' -p: power off after shutdown'); Writeln(' -l: log off only'); Writeln(' -n: kill apps that do not want to die.'); Writeln(' -c: cancel a running shutdown.'); end else begin if HasParam('k') then warn := True; if HasParam('r') then reboot := True; if HasParam('h') and reboot then begin Writeln('Error: Cannot specify -r and -h parameters together!'); Exit; end; if HasParam('h') then reboot := False; if HasParam('n') then downQuick := True; if HasParam('c') then cancelShutdown := True; if HasParam('p') then powerOff := True; if HasParam('l') then logoff := True; DoShutdown; end; end. Взято сhttp://delphiworld.narod.ru -------------------------------------------------------------------------------- Для выполнения перезагрузки/выключения предназначены функции ExitWindows/ExitWindowsEx ExitWindows: Описание: Function ExitWindows(Reserved: DWord; ReturnCode: Word): Bool; Иницииpует стандаpтную пpоцедуpу завеpшения pаботы с Windows. Все пpикладные задачи должны подтвеpдить завеpшение pаботы Windows. Вызывает функцию 4CH пpеpывания 21H DOS. Паpаметpы: Reserved: Установлен в нуль. ReturnCode: Значение, пеpедаваемое в DOS (в pегистpе AL). Возвpащаемое значение: Нуль, если одна или несколько задач отказываются завеpшить pаботу. Примеры использования: ExitWindows(EWX_LOGOFF,0); - завершение сеанса ExitWindows(EWX_SHUTDOWN,0); - выключение компьютера ExitWindows(EWX_REBOOT,0); - перезагрузка Флаги EWX_FORCE, EWX_POWEROFF и EWX_FORCEIFHUNG могут комбинироваться к нужному действию. ExitWindowsEx: Функция ExitWindowsEx() представляет собой расширенный вариант ExitWindows(). Описание: BOOL ExitWindowsEx( UINT uFlags, DWORD dwReserved, ); Функция ExitWindowsEx перезагружает(restart) или выключает систему (shutdown), а также может завершить сессию для текущего пользователя(log off). Параметры: uFlags -- флаг завершения работы, может принимать следущие значения: EWX_LOGOFF завершает сессию текущего пользователя. EWX_POWEROFF выключает питание компьютера(компьютер должен поддерживать данную функцию). EWX_REBOOT перезагружает систему. EWX_SHUTDOWN завершает работу комьпьютера до того места, где он может быть безопасно выключен: сброшенны все файловые буферы на диск, завершает работу всех процессов. dwReserved --Зарезирвированно для последующих нужд, параметр игнорируется. Возвращаемое значение: Не ноль если всё прошло успешно Пример использования: ExitWindowsEx(EWX_SHUTDOWN,0); Остальные примеры смотри в описании первой функции. Вышеописанные примеры действительны только для w9x/Me. Дело в том, что, чтобы выполнить функциию в NT ОС, нужно получить права на выполнение этой функции. Сделать это можно через AdjustTokenPriviligies. С помощью нижеприведённой функции можно получить любую привелегию, в т.ч. и привеленгию SeShutdownPrivilege, которая нужна для разрешения функции ExitWindows(Ex) 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; Пример использования для среды NT: SetPrivilege('SeShutdownPrivilege',True); ExitWindowsEx(EWX_SHUTDOWN,0); Автор: Song Взято из http://forum.sources.ru |
| virf:
Zephyr, спасибо, думаю пригодится, однако я не говорил что я уверен в том, что дело в примерах, и поскольку в книге я рассмотрел только один пример, мне не так просто определить какой именно пример стал причиной, Естественно я пытался восстановить с помощью примеров. На Alt+F4 Windows никак не реагирует, если все окна закрыты, извини что в первом посту забыл написать. |
| Йобан Матич:
Можно всё проще сделать Создать текстовый документ со строкой shutdown -s сохранить с расширением bat и всё. |
| Навигация |
| Главная страница сообщений |