微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在指定的时间自动打开计算机

我正在编写一个C ++程序。 这个程序在运行的时候应该得到一个时间和closures系统后,在指定的时间自动开启。 我search,但无法find我的问题的答案。 我的操作系统是Windows 7和8.我的硬件是1 – 主板:华硕,cpu:AMD或2 – 主板:技嘉,cpu:英特尔谢谢。

把应用程序启动

应用程序在Windows启动C#

处理引导后才出现的错误

如何在embedded式linux启动时启动init.d脚本。 我没有update-rc.d。 有没有其他的方式来启动Linux启动init.d脚本?

如何使用身份validation在新兴服务中设置mogodb

正如有些人所说,就我所能发现,除非您使用另一台计算机和局域网唤醒功能,否则不可能安排一台普通个人电脑开机。 但是,您可以使用等待定时器从休眠或暂停状态中唤醒。 两个状态可以通过SetSuspendState API函数以编程方式到达。 其他三个Windows API函数将帮助您使用第二种方法

CreateWaitableTimer

SetWaitableTimer

CancelWaitableTimer

我不建议彻底破解任何BIOS配置。 为了安全,只需使用您的系统提供的格式良好的API。 这些黑客有时会导致不希望的或意外的行为。

我已经重做了这个答案,以回应留下的评论

首先为关机命令尝试以下操作:

main() { system("c:\WINDOWS\System32\shutdown /s /t 0"); return 0; }

本教程的更多信息

现在醒来……我不认为有可能在没有BIOS唤醒功能的桌面上启动,并设置一个客户端来发送它的神奇数据包。

所以我认为最好的办法是有一个设备坐在同一个子网上处理启动魔术包的发送…不是一个很棒的选择,但如果明确的关机是你在找什么,那么有限的方式获得它没有手动这样做。

就像背景一样,魔术数据包地址帧是按照以下格式完成的 – 6 * 255 aka 0xFF,目标MAC地址重复16次。 所以如果你的MAC地址是01:02:03:04:05:06那么这个帧就像这样:

FFFFFFFFFFFF010203040506010203040506010203040506010203040506 010203040506010203040506010203040506010203040506010203040506 010203040506010203040506010203040506010203040506010203040506 010203040506010203040506

参见WOL Mini HOWTO – 第2章

在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,(struct sockaddr*)&udpserver,sizeof(udpserver));**

唤醒局域网教程 – C ++示例参考

你可以使用批处理文件和编码关闭。 一旦以任何语言关机,就无法打开电脑,因为这是硬件要求。

您可以通过编程从睡眠模式打开电脑(不是关机状态)。

作为第二个选项,您可以添加一些自定义外部硬件来触发开机事件(按下电源开关,网络唤醒,环形唤醒,键盘空格键按下,电源线上的直接绿黑线接触等)

一个DIY可编程WOL魔术包发送者的例子: http : //forum.arduino.cc/index.PHP/topic,15330.0.html

计算机打开时,这样的硬件显然应该是可编程的

您可以使用shell关闭您的PC调用关机命令。

对于启动,大多数BIOS支持局域网唤醒。

你将不得不在第二台电脑上运行你的程序,并发送一些通常称为魔术包的数据包,使用你的电脑的局域网MAC地址打开。

你可以在这里http://en.wikipedia.org/wiki/Wake-on-LAN了解更&#x591A;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐