Как выключить ПК средствами Си?
Как выключить ПК без использования библиотек виндовс и тд. (ос нет)
То есть есть программа которая загружается вместо виндовс (с флешки (если в биосе выбрать флешку загрузочной(не хак!))).
Показывает какие то данные и по нажатию enter она должна выключить ПК.
Нашел такой код но он перезагружает ПК (все что находил либо не работает либо перезагружает).
- Вопрос задан более трёх лет назад
- 553 просмотра
- Вконтакте
- Вконтакте


Так вы не находите код с бездумным копированием его в исходники, а разберитесь как он работает, какие бывают интерфейсы для управления питанием. Убедитесь, какие интерфейсы поддерживает ваша система, биос.
Гуглите APM power off, либо ACPI global state G2 (или sleep state S5).
Первый проще, но древний и не поддерживается уже практически, в пользу второго. Второй современнее, но очень сложный и более функциональный.
А у вас какой-то кусок из APM, выдранный непонятно откуда. Почему он по-вашему должен заработать?
Откройте исходники любой современной ОС, и посмотрите, как там сделано. Там всё порядком посложнее, чем просто 5 команд.
Пишем программу выключения компьютера на C#

Сегодня напишем программу выключения компьютера на C#.
Иногда нужно выключить компьютер через какое-то время. Например, Вы легли спать и хотите послушать какой-нибудь ролик на ютубе, пока засыпаете. После того как завершится ролик, лучше выключить компьютер, чтобы он не работал всю ночь. Для этого и предназначена наша программа.
Эта разработка будет перекликаться с программой «Будильник», которую мы недавно программировали.
Внешний вид будет такой:
Приступим к созданию интерфейса.
Открываем Visual Studio. Создаём новый проект «Приложение Windows Forms (.NET Framework)». Зададим свойства для самой формы. Свойство Text: «Выключение компьютера», это название самой формы, которое мы видим в верху. Свойство Size: 800, 500. Это размеры нашего окна. Свойство StartPosition: CenterScreen, чтобы программа запускалась по центру экрана. Свойство MaximizeBox: Fasle (запретим разворачивать окно на весь экран). Свойство FormBorderStyle: FixedSingle (запрещаем менять размеры формы).
Нажмём на панель инструментов. Выберем элемент Label и перенесём на форму. Изменим свойства — Text: «выключение произойдёт через», Font: размер на 16pt. После этого можно узнать размер этого компонента lable. Посмотрим свойство Size. Ширина получилась равна 425. Рассчитаем, чтобы вывеска программы раположилась посередине: (800 — 425) / 2 = 187. Т.е. с левого края отступим 187 пикселей. Установим свойство Location: 187, 48.
Перенеcём три элемента TextBox. Все элементы будут иметь одинаковые свойства, кроме Location. Font: шрифт в 16 pt, свойство — Size: 100, 38, свойство TextAlign: Center. Location: для textBox1 150; 152, для textBox2 350; 152, для textBox3 550; 152. Таким образом, элементы равномерно разместились в нашем окне. Данные для локации всех элементов легко вычисляются, т.к. мы знаем их размеры и знаем размер окна.
Так же к каждому TextBox’у справа прикрепляем элементы Label. Пишем в каждом Label’e Ч, М, С соответственно.
Свойство Font у Label’ов: размер устанавливаем в 14pt. Совойство Text устанавливаем соответственно в Ч, М, С. Расположение можно установить вручную на одинаковой высоте и на одинковом расстоянии от TextBox’ов.
Добавим на форму кнопку (элемент Button).
Для кнопки название (свойство Text): «Запустить». Размеры (Size): 200, 52. Расположение (Location): 300, 293.
Приступаем к программированию. Нажимаем F7 и переходим к коду.
В самом начале класса Form заводим переменные для каждого текстового поля соответственно.
Мы хотим, чтобы в начале в каждом текстовом поле был ноль.
Все переменные делаем закрытыми private.
Выделяем форму. В окне свойств переходим на значок событий (иконка в виде молнии). Ищем событие Load (загрузка формы). Кликаем два раза на ячейку справа от этого события. Visual Studio автоматически создаст функцию обработчика события загрузки формы в коде. Там пропишем код:
Нам нужно, чтобы в текствые поля (textBox) можно было писать только цифры. Пропишем для элементов TextBox событие KeyPress (нажатие клавиши т.е. изменение значения Textbox):
В конце функции прописано e.Handled = true. Если мы дойдём до этой строчки, то нажатие клавиши заблокируется, т.е. при нажатии клавиши в этом поле ничего не произойдёт. Если пользователь ввёл цифры и при этом количество этих цифр в TextBox’е равно 0 или 1, то мы прописываем return (выход из функции обработчика события), тем самым, избежим блокировки нажатия. Мы ждём от пользователя только цифры, и количество этих цифр не может превышать двух в любом из TextBox’ов.
Так же мы разрешаем нажимать клавишу Backspace, за это отвечает второе условие. Если клавиши «легальны», то выходим из функции и блокировка события не происходит, в остальных случаях нажатие клавиши будет проигнорировано.
Тоже самое сделаем и для остальных TextBox’ов. Только заменим в пободных функциях имена на textBox2 и textBox3 соответственно.
Создадим аналогичным образом обработчик события Click для кнопки «Запустить». Эта кнопка должна запускать таймер. Из панели элементов кинем на форму таймер (Timer).
Если сейчас кнопка называется «Запустить», значит, при нажатии запускается таймер, и кнопка меняет название на «Стоп». Если же кнопка назвается «Стоп», то она останавливает таймер, и название кнопки меняется снова на «Заменить».
Пропишем настройки для таймера в функции Form1.
Функция Timer1_Tick должна запускаться каждую секунду. Эту функцию тоже пропишем внутри класса Form.
Что напишем в этой функции? Она должна считать в обратном порядке. Берём секунды, если там не ноль, то нужно уменьшить значение на 1. Иначе, уменьшаем на единицу минуты, но в секундах устанавливаем 59, и так же делаем с часами.
Как только в текстовых полях будут все нули, запускается функция выключения компьютера Shutdown(). Мы её должны сами написать. Возьмём код из интернета.
Чтобы она нормально заработала, нужно в начале дописать «using System.Management;». А так же сделать Проект->Добавить ссылку->Сборки и поставить галочку на System.Management.
При нажатии кнопки «Запустить», проверим, чтобы в поле секунды было значение меньше 59. И в поле минуты так же должно быть ограничение, чтобы значение было меньше 59. А так же проверим все три поля, чтобы они не были пустыми. Важно в начале проверить на пустоту строчку, а потом переводить её в целый тип данных, иначе может быть ошибка.
Пропишем в функцию button1_Click
Пока идёт отсчёт, нужно заблокировать textBox’ы, чтобы нельзя было редактировать их. Пропишем свойство ReadOnly.
Наша программа готова! Вы её можете скачать по ссылке ниже. Так же можете купить проект данной программы за 250 рублей, если лень самим набирать вручную.
Как с клавиатуры выключить компьютер, если он завис или не работает мышь

Компьютер хоть и умная, но всё-таки просто машина, в работе которой могут случаться сбои. Во время перезагрузки системы все её процессы обнуляются и запускаются вновь, что на практике помогает устранить большинство распространённых проблем в ОС. Но как перезагрузить ПК, если он завис, а мышь или экран не подают признаков жизни? В этой статье блога itswat.ru рассказывается о том, как с клавиатуры выключить компьютер несколькими способами.
- Читайте также: Почему компьютер самопроизвольно выключается: разбор распространённых причин и их решение >>>
Принудительная перезагрузка
Первое, что многим пользователям приходит в голову в подобной ситуации – это выдернуть шнур из сети. Ещё один популярный вариант – зажатие кнопки включения/выключения на системном блоке.

Эти методы действенны, но их частое применение не проходит бесследно для ПК, так как они негативно влияют на материнскую плату и винчестер. Выключить компьютер аварийным способом, а принудительно – это как раз такой способ, можно, но только если больше совсем ничего не помогает. На самом деле, если работает клавиатура, то с её помощью без мышки можно легко полностью отключить машину или выполнить перезагрузку.
Есть ещё возможность это сделать самым простым и удобным способом нажать на клавиатуре клавишу «Power», но поскольку не на всех из них она присутствует, поэтому идём дальше.

- Читайте также: Как без мышки перезагрузить компьютер: естественные и принудительные способы с помощью кнопки на системном блоке и клавиатуры >>>
Сочетание клавиш
Всё что требуется – запомнить одно, а лучше несколько сочетаний клавиш, которые нужно будет нажать на клавиатуре (все вместе одновременно) в момент «забастовки» компьютера.
Ctrl + Alt + Del
Ctrl + Alt + Del – эта комбинация известна многим ещё со школьной скамьи, она помогает запустить Диспетчер задач, чтобы снять зависшие задачи или выключить компьютер.

После нажатия этих кнопок, на экране на синем фоне появится меню, а вместе с ним в правом нижнем углу круглая кнопка выключения. Добраться до неё можно посредством клавиши Tab. Когда она выделится, нужно нажать Enter, а в развернувшемся списке команд стрелками выбрать «Завершение работы» и ещё раз нажать Enter.

Если проблема не только с мышкой, но и с монитором, то выключить компьютер можно без него, также с клавиатуры, только выполняя эти действия вслепую. Например, в Windows 8.1 нужно нажать:
- Ctrl + Alt + Del.
- Пять раз на Tab.
- Один раз на Enter.
- Два раза на стрелочку вниз.
- Ещё раз Enter.
Alt + F4
Alt + F4 – это сочетание можно по праву назвать лучшим, так как с его помощью можно отключить машину буквально в два нажатия.

Если в случае возникновения проблемы были открыты какие-либо окна, то нажатие на Alt + F4 приведёт к их поочерёдному закрытию (сколько окон открыто, столько раз нужно нажать на клавиши). Последнее нажатие приведёт к появлению системного окошка с предложением выключения ПК.

Внимание! В сроке с выпадающим списком должно стоять значение «Завершение работы». Если это не так, то стрелочками вниз и вверх следует переместиться к нужному пункту и подтвердить действие нажатием Enter.
Отключить ПК можно и стандартным способом через «Пуск», но раскрыв его посредством кнопки Win (похожа на плывущее окошко).

После раскрытия пускового меню следует:
- Посредством стрелок вниз/вверх добраться до выпадающего списка завершения.
- Нажать на Enter.

Собственное сочетание
Чтобы в следующий раз при схожей ситуации не испытывать никаких затруднений, можно создать собственную комбинацию клавиш для выключения ПК. Для этого следует:
- Правым щелчком мыши по пустому пространству Рабочего стола и выбором соответствующих пунктов в списке создать «Новый ярлык».

- В строку появившегося окна вписать команду shutdown -s -t 0 и нажать «Далее».

- Придумать ярлыку имя, например, «ВЫКЛ» и закончить создание кнопкой «Готово».

- Правым щелчком мыши по ярлыку перейти к его свойствам.

- Поставить курсор в строку «Быстрый вызов», и нажать клавиши Ctrl + Alt + ещё одну любую, например, Z как на фотопримере.

- Дальнейшее нажатие заданных клавиш будет запускать ярлык, а он – выключать компьютер.
Последний метод не поможет отключить машину «здесь и сейчас». Для этого придётся использовать один из предыдущих описанных способов. После устранения проблемы стоит всё-таки создать такой ярлык для отключения, чтобы быть готовым к следующим сбоям.
Как выключить компьютер из C#
каков наилучший способ выключить компьютер из программы на C#?
Я нашел несколько способов, которые работают — я их выложу ниже, но ни один из них не очень элегантно. Я ищу что-то более простое и изначально .net.
18 ответов:
работает, начиная с windows XP, не доступен в win 2000 или ниже:
Это самый быстрый способ сделать это:
в противном случае используйте P/Invoke или WMI, как говорили другие.
Edit: как избежать создания окна
взято из: сообщение Geekpedia
этот метод использует WMI для завершения работы windows.
вы должны добавить ссылку на System.Управления для вашего проекта, чтобы использовать это.
уродливый метод старой школы. Используйте ExitWindowsEx функция из Win32 API.
в производственном коде вы должны проверять возвращаемые значения вызовов API, но я оставил это, чтобы сделать пример более ясным.
короткий и сладкий. Вызов внешней программы:
Примечание: это вызывает завершение работы Windows.exe-программа, поэтому она будет работать только в том случае, если эта программа доступна. Возможны проблемы в Windows 2000 (где выключение.exe доступен только в наборе ресурсов) или XP Embedded.
должны работать.
для перезапуска, это /r
это перезапустит окно ПК напрямую и чисто, без диалогов.
- shutdown -s -t 0 — остановка
- shutdown -r -t 0 перезагрузка
У меня возникли проблемы с использованием метода WMI, принятого выше, потому что я всегда получал privilige не удерживаемые исключения, несмотря на запуск программы в качестве администратора.
решение было для процесса, чтобы запросить привилегию для себя. Я нашел ответ на http://www.dotnet247.com/247reference/msgs/58/292150.aspx написано парнем по имени Ричард Хилл.
я вставил мое основное использование его решения ниже в случае, если эта ссылка получает старый.
обратите внимание, что отключение.exe-это просто обертка вокруг InitiateSystemShutdownEx, что обеспечивает некоторые тонкости, отсутствующие в ExitWindowsEx
нет собственного метода .net для отключения компьютера. Вам нужно P / вызвать вызов EXITWINDOWS или ExitWindowsEx API.
пробовал метод WMI roomaroo для завершения работы Windows 2003 Server, но это не будет работать, пока я не добавил ‘[STAThread] ‘(т. е.»Однопоточная Квартира» потоковая модель) в Main() объявление:
затем я попытался отключить поток, и чтобы заставить его работать, мне пришлось установить «состояние квартиры» потока в STA:
Я C# noob, поэтому я не совсем уверен в значении потоков STA в условия отключения системы (даже после прочтения ссылки, которую я опубликовал выше). Возможно, кто-то еще добавит.
использовать shutdown.исполняемый. Чтобы избежать проблем с передачей args, сложное выполнение, выполнение из WindowForms используйте PowerShell execute script:
просто чтобы добавить к ответу Pop Catalin, вот один лайнер, которая выключает компьютер без отображения каких-либо окон:
Если вы хотите, чтобы выключить компьютер удаленно, то вы можете использовать
на любой кнопке нажмите
Если вы добавляете в систему.Окна.Формы ссылаются на ваш проект, затем вы можете найти в этом пространстве имен класс приложения, который имеет статические методы. Один из них-это то, что вы хотите/нуждаетесь/ищете, и он называется «SetSuspendState». Я использовал эту функцию в прошлом, и с ней мне удается легко выключить компьютер. Есть варианты, как вы хотите, чтобы выключить компьютер с помощью этой функции. Он принимает 3 параметра. Во-первых, перечисление PowerState (Hibernate или Suspend), во-вторых, сила bool, и в-третьих bool disableWakeEvent. Вы можете прочитать об этой функции более подробно в интернете. Следующая строка выполнения завершит работу вашего компьютера, Как вы ожидали (я надеюсь, что так):

