Как отказать в отключении при кратковременном нажатии кнопки питания? - PullRequest
8 голосов
/ 13 марта 2009

На большинстве новых компьютеров вы можете отключить жесткий режим, нажав кнопку питания на пару секунд. Но я хочу полностью это предотвратить.

Вы можете предотвратить некоторые программные события, такие как спящий режим, режим ожидания, спящий режим и события «Нажать кнопку питания» на панели управления Windows; Вы также можете использовать некоторые программы на Win32 и WDI для захвата и обработки / отклонения этих событий, но это не останавливает механическое отключение 1004 * при длительном удержании кнопки. Полагаю, кнопка питания жестко подключена к источнику питания и никогда не ждет ОС, когда вы удерживаете ее нажатой в течение нескольких секунд? Или есть какой-нибудь способ предотвратить даже этот случай с помощью кода?

Я разработчик .NET.

Whooaaa ...! Многие из вас действительно спорили за то, что не делали этого. владеть моим компьютером или моей ОС ", -" ты разработка SkyNet "и т. д. :) Это Приложение является высоко настроенным и закрытое решение для некоторых клиентов. Это приложение киоска на заказ аппаратное обеспечение, работающее на Windows XP Встроенный и использовать сенсорный экран. Это не публично.

Ответы [ 13 ]

11 голосов
/ 13 марта 2009

Я бы надеялся , что ты не сможешь этого сделать. Я несколько раз сталкивался с ситуациями, когда я не мог перезагрузить компьютер другим способом. В таких случаях действительно ли вы хотите заставить пользователя ноутбука отключить питание и вынуть аккумулятор во время работы?

Получив это предупреждение, вы, возможно, пишете программное обеспечение для довольно разных ситуаций, где это имеет больше смысла. Не могли бы вы дать более подробную информацию о мотивации для этого?

Если пользователь может удерживать кнопку питания нажатой (указывая, что он действительно, действительно хочет выключить машину), он не может физически отключить питание?

РЕДАКТИРОВАТЬ: Ответ на комментарий от magsto:

Если все вовлеченные действительно, действительно хотят этого - объяснив им, что, если что-то пойдет не так, и им нужно будет перезагружать компьютер, им придется пойти на еще более прямой способ выключения, который я подозреваю скорее повредит аппаратное обеспечение, чем метод «удерживать питание» ... поговорите с производителем устройства. Похоже, вы, вероятно, работаете с конкретным устройством, поэтому они могут настроить что-то в BIOS для вас, даже если это не общедоступный вариант.

Учитывая, что это почти всегда очень плохая идея, я не удивлен, что нет простой поддержки для нее, но если вы спросите производителя, может быть какой-то скрытый способ сделать то, что вы хотите. Тем не менее, я бы посоветовал вам привлечь всех к размышлениям обо всех возможных последствиях.

8 голосов
/ 13 марта 2009

См. Страницу 62 спецификации ACPI относительно правила 4-х секунд (http://www.acpi.info/DOWNLOADS/ACPIspec30b.pdf)

Короче говоря, логика аппаратная.

5 голосов
/ 21 декабря 2012

Используйте выключатель пульсатора. Я не уверен, что это правильный термин, но я видел их в каталоге (ах). Это переключатель мгновенного действия, который «делает» только доли секунды при нажатии, а не при отпускании. Остановка в середине не работает. Как только вы достигнете порога, механизм начнет двигаться, чтобы закрыть контакт, и не остановится, пока контакт не откроется снова. Это позволит вам нормально запускаться и останавливаться нормально, но невозможно удерживать цепь замкнутой в течение 4 секунд. (без вскрытия корпуса, конечно)

5 голосов
/ 13 марта 2009

Это действительно механическое отключение, поэтому его будет сложно обойти.

Если это действительно важно, вы можете отсоединить кнопку питания и включить / выключить компьютер с помощью функции Wake-On-Lan, соответственно. дистанционное отключение.

4 голосов
/ 13 марта 2009

Отсоедините кабель питания от материнской платы и подключите его, чтобы он был постоянно включен. :)

4 голосов
/ 13 марта 2009

Насколько я знаю, вы правы, говоря, что ОС даже не участвует в этом типе "выключения". Удерживание кнопки питания в течение некоторого времени является лишь сигналом для оборудования, чтобы немедленно отключить питание всех устройств в компьютере. Обычные события выключения / сна / спящего режима, конечно, могут быть перехвачены и обработаны с использованием WinAPI, как вы заявляете.

4 голосов
/ 13 марта 2009

Это невозможно, так как отключение питания происходит ниже уровня операционной системы, поэтому это похоже на то, как вы тянете за вилку, если речь идет об ОС!

2 голосов
/ 28 марта 2009

Хорошо, так что, может быть, безумно отключать кнопку питания. Но у нас есть программное приложение, которое использует базу данных и использует дорогой набор лицензий. Этот крупный немецкий поставщик использует менеджер лицензий, который физически перемещает лицензии по диску. Дефрагментация, некоторые антивирусные приложения и отключение питания портят лицензии. У нас есть ИБП для элегантного отключения при отключении питания машины. Теперь кажется, что какой-то сервисный парень или оператор выключил компьютер с помощью кнопки питания, которая повредила лицензии. Эти устройства расположены в удаленном месте по всему миру, и обучение оператора не всегда может предотвратить это. Похоже, что варианты решения: 1) работать с поставщиком, чтобы отключить кнопку питания, 2) попытаться перехватить ее и предупредить пользователя о возможной гибели, или 3) изменить дизайн дисплея, используя ОС и приложение, неуязвимые для этого отключения питания.

2 голосов
/ 13 марта 2009

Собираетесь ли вы ближе к разработке SkyNet?

Извините за этот вопрос, но, как многие и предположили, я тоже считаю, что это не должно быть возможным, если вообще возможно разработать.

2 голосов
/ 13 марта 2009

Я считаю, что единственный способ изменить это - вручную изменить настройки в BIOS. Это, вероятно, не может быть пойман языком программирования. Если вам действительно нужно, вы можете просто отключить крошечный провод от материнской платы, который идет к кнопке питания.

...