Я пишу программу на C ++.
эта программа при запуске должна получать время, а после выключения системы автоматически включаться в указанное время.
Я искал, но не мог найти ответы на свои вопросы.
Моя ОС Windows 7 и 8.
у меня аппаратная часть: 1-материнская плата: Asus, процессор: AMD или 2-материнская плата: гигабайт, процессор: Intel
Благодарю.
Как говорили некоторые люди, и, насколько я могу судить, невозможно запланировать нормальное включение ПК для значительного диапазона ПК, если вы не используете другую машину и Wake On LAN возможность.
Однако вы могли бы использовать ожидаемые таймеры разбудить от спячки или приостановки. Два состояния, которые могут быть достигнуты программно через SetSuspendState API-функция. Другой
Три функции Windows API помогут вам со вторым подходом:
Я не рекомендую взломать любую конфигурацию BIOS на всех. Для безопасности просто используйте то, что ваша система предоставляет в виде хорошо документированного API. Эти взломы иногда приводят к нежелательному или неожиданному поведению.
Я переделал этот ответ в ответ на оставленный комментарий …
Сначала для команды выключения попробуйте следующее:
main()
{
system("c:\\WINDOWS\\System32\\shutdown /s /t 0");
return 0;
}
Дополнительная информация в этом уроке
Теперь, чтобы проснуться …
Я не думаю, что можно запустить на настольном компьютере без Wake-On-Lan в BIOS и настроить клиент для отправки ему волшебного пакета.
Таким образом, лучший способ, которым я считаю, состоит в том, чтобы устройство, находящееся в той же подсети, обрабатывало отправку пакета запуска волшебный пакет … не удивительный вариант, но если вы ищете определенное завершение работы, то есть ограниченные способы получения это снова, не делая этого вручную.
Так же, как фон, фрейм адреса магического пакета выполняется в следующем формате — 6 * 255 или 0xFF, MAC-адрес назначения повторяется 16 раз. Поэтому, если ваш MAC-адрес 01: 02: 03: 04: 05: 06, кадр будет выглядеть так:
FFFFFFFFFFFF010203040506010203040506010203040506010203040506
010203040506010203040506010203040506010203040506010203040506
010203040506010203040506010203040506010203040506010203040506
010203040506010203040506
В c ++ сам пакет может быть сконструирован примерно так, вводя в каждый раздел преобразованный адрес получателя.
unsigned char tosend[102];
unsigned char mac[6];
/** first 6 bytes of 255 **/
for(int i = 0; i < 6; i++) {
tosend[i] = 0xFF;
}
/** store mac address **/
mac[0] = 0x01;
mac[1] = 0x02;
mac[2] = 0x03;
mac[3] = 0x04;
mac[4] = 0x05;
mac[5] = 0x06;
/** append it 16 times to packet **/
for(int i = 1; i <= 16; i++) {
memcpy(&tosend[i * 6], &mac, 6 * sizeof(unsigned char));
}
Затем создайте отправителя следующим образом, который будет транслировать пакет всем устройствам в подсети, но только что созданный кадр сообщает MAC-адрес:
int udpSocket;
struct sockaddr_in udpClient, udpServer;
int broadcast = 1;
udpSocket = socket(AF_INET, SOCK_DGRAM, 0);
/** you need to set this so you can broadcast **/
if (setsockopt(udpSocket, SOL_SOCKET, SO_BROADCAST, &broadcast, sizeof broadcast) == -1) {
perror(“setsockopt (SO_BROADCAST)”);
exit(1);
}
udpClient.sin_family = AF_INET;
udpClient.sin_addr.s_addr = INADDR_ANY;
udpClient.sin_port = 0;
bind(udpSocket, (struct sockaddr*)&udpClient, sizeof(udpClient));
/**make packet as shown above**/
**/** set server end point (the broadcast address)**/
udpServer.sin_family = AF_INET;
udpServer.sin_addr.s_addr = inet_addr(“192.168.1.255″);
udpServer.sin_port = htons(9);
/** send the packet **/
sendto(udpSocket, &tosend, sizeof(unsigned char) * 102, 0, (struct sockaddr*)&udpServer, sizeof(udpServer));**
Учебник по пробуждению по локальной сети — ссылка на пример C ++
Вы можете завершить работу, используя командный файл и кодирование в нем.
Невозможно включить компьютер после его выключения на любом языке, так как это требование к оборудованию.
Вы можете программно включить компьютер из спящего режима (не в выключенном состоянии).
Как второй вариант, вы можете добавить некоторое внешнее оборудование для запуска события включения (нажатие выключателя питания, пробуждение по локальной сети, пробуждение по кольцу, нажатие клавиши пробела на клавиатуре, прямое зелено-черное подключение проводов на кабеле электропитания и многие другие)
Пример программируемого отправителя волшебного пакета WOL своими руками:
http://forum.arduino.cc/index.php/topic,15330.0.html
Очевидно, что такое оборудование должно быть программируемым, когда компьютер включен
Вы можете выключить компьютер, вызвав команду shutdown с помощью оболочки.
для запуска большинство BIOS поддерживает пробуждение по локальной сети.
Вам нужно будет запустить свою программу на втором ПК и отправить некоторые пакеты, обычно называемые волшебными пакетами, адресованными с использованием MAC, для включения локальной сети вашего ПК.
Вы можете прочитать об этом больше здесь http://en.wikipedia.org/wiki/Wake-on-LAN