Есть ли способ для функции приложения C ++ включить компьютер? - PullRequest
0 голосов
/ 22 сентября 2011

Мне нужно найти, чтобы включить компьютер из приложения C ++, есть ли способ сделать это?Спасибо

Ответы [ 7 ]

5 голосов
/ 22 сентября 2011

Если компьютер выключен, он не может выполнять код и, следовательно, не может автоматически включаться автоматически.

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

Если вам нужно включить другой компьютер, взгляните на Wake-on-LAN .

3 голосов
/ 22 сентября 2011

Вы не сможете написать программу для включения компьютера, на котором установлена ​​сама программа.

Если вам нужно написать приложение, которое включит другой компьютер, Wake-on-LAN - инструмент для вас Современные настольные ПК имеют сетевые адаптеры, которые всегда получают питание - даже если компьютер находится в состоянии S5. Предполагая, что BIOS поддерживает его и он включен.

Wake-On-LAN работает, посылая волшебный пакет на сетевую карту. Детали того, из чего состоит полезная нагрузка, изложены в статье.

2 голосов
/ 22 сентября 2011

Возможно, это копия C #: как активировать систему, которая была выключена? (хотя это C #).

Один из способов сделать это в Windows - создать таймер с помощью CreateWaitableTimer(), установить время с помощью SetWaitableTimer(), а затем выполнить WaitForSingleObject(). Ваш код будет приостановлен, и вы можете перевести компьютер в режим ожидания (возможно, также в спящий режим, но не в выключенном состоянии). Когда таймер будет достигнут, компьютер возобновит работу, и ваша программа тоже.

См. здесь для полного примера на C. В примере показано, как рассчитать разницу во времени для таймера и как выполнить ожидание в потоке (если вы пишете графическое приложение).

Я должен добавить, что вы также можете запланировать запуск компьютера с помощью планировщика задач Windows («Разбудить компьютер для запуска этой задачи»). Это возможно также работает, когда компьютер выключен. В некоторых компьютерах также есть возможность установить время пробуждения.

В Linux вы можете настроить компьютер на включение, записав в специальный файл:

echo 2006-02-09 23:05:00 > /proc/acpi/alarm

Обратите внимание, что я не проверял все это, и это сильно зависит от аппаратного обеспечения (материнской платы), но какой-то пробуждение должно быть доступно на всех современных ПК.

Смотри также: http://en.wikipedia.org/wiki/Real-time_clock_alarm, и вот программа, которая утверждает, что делает это на окнах: http://www.dennisbabkin.com/wosb/

1 голос
/ 22 сентября 2011

Как вы можете включить компьютер из приложения, если на нем не запущены процессы, когда он выключен?Вы можете включить другой компьютер (Wake on Lan), но не тот, на котором вы работаете.

1 голос
/ 22 сентября 2011

Используйте strip.Если вам требуется, чтобы компьютер Windows был включен, следует использовать кросс-инструменты i686-w64-mingw32-strip или x86_64-w64-mingw32-strip.Эти программы командной строки изменяют исполняемый файл, и в результате он может включить компьютер.

0 голосов
/ 23 сентября 2011

Скорее всего, если вы хотите сделать это, вы работаете с серверами. В таком случае на вашей материнской плате может быть контроллер управления материнской платой IMPI. IPMI может использоваться для удаленного включения питания шасси. Обычно BMC имеет собственный IP-адрес, к которому вы можете подключиться для отправки управляющих сообщений.

0 голосов
/ 22 сентября 2011

Это возможно.

Первое, что нужно сделать, это настроить Wake On Lan. Прочтите этот пост на Lifehacker о том, как это сделать: http://lifehacker.com/348197/access-your-computer-anytime-and-save-energy-with-wake+on+lan.

(Или эта ссылка: http://hblg.info/2011/08/21/Wake-on-LAN-and-remote-login.html)

Затем вам нужно отправить волшебный пакет из вашего приложения C ++. Есть несколько веб-сервисов, которые уже делают это из javascript (wakeonlan.me), но это также можно сделать из приложения C ++.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...