有没有办法让C ++应用程序功能打开电脑?

时间:2011-09-22 12:33:07

标签: c++ winapi

我需要找到从c ++应用程序打开电脑, 有没有办法做到这一点? 谢谢

7 个答案:

答案 0 :(得分:5)

如果计算机已关闭,则无法执行代码,因此无法以编程方式自行启动。

ACPI稍微改变一下,但为了让我们能够提供帮助,您必须更加具体地了解您的具体要求。

如果您需要打开其他计算机,请查看Wake-on-LAN

答案 1 :(得分:3)

您将无法编写程序来打开安装程序本身的计算机。

如果您需要编写可以打开其他计算机的应用程序,Wake-on-LAN就是您的工具。现代桌面具有始终接收电源的NIC - 即使计算机处于S5状态。假设BIOS支持它并且已启用。

局域网唤醒通过向NIC发送Magic Packet来工作。文章概述了有效载荷的详细信息。

答案 2 :(得分:2)

这可能是C#: How to wake up system which has been shutdown?的副本(尽管那是C#)。

在Windows下执行此操作的一种方法是使用CreateWaitableTimer()创建计时器,使用SetWaitableTimer()设置时间,然后执行WaitForSingleObject()。您的代码将暂停,您可以将计算机置于待机状态(也可能是休眠状态,但不会关闭)。当达到计时器时,PC将恢复,程序也将恢复。

有关C中的完整示例,请参阅here。该示例显示如何计算计时器的时差,以及如何在线程中进行等待(如果您正在编写图形应用程序)。

我必须添加,您还可以安排计算机使用Windows任务计划程序唤醒('唤醒计算机以运行此任务')。这可能也适用于计算机关闭时。某些计算机BIOS中还有一个选项可以设置唤醒时间。

在Linux下,您可以将计算机设置为通过写入特殊文件来唤醒:

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

请注意,我还没有对所有这些进行测试,并且它高度依赖于硬件(主板),但是所有现代PC都应该提供某种唤醒功能。

另见:http://en.wikipedia.org/wiki/Real-time_clock_alarm, 这是一个声称在Windows上执行此操作的程序:http://www.dennisbabkin.com/wosb/

答案 3 :(得分:1)

使用strip。如果您需要启用Windows计算机,则应使用交叉工具i686-w64-mingw32-stripx86_64-w64-mingw32-strip。这些命令行程序修改可执行文件,结果可以打开计算机。

答案 4 :(得分:1)

如果计算机在关闭时没有运行任何进程,你怎么能从应用程序打开它?您可以打开另一台计算机(Wake on Lan),但不能打开正在运行的计算机。

答案 5 :(得分:0)

有可能。

首先要做的是配置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 ++应用程序发送一个魔术包。有几个Web服务已经通过javascript(wakeonlan.me)实现了这一点,但它也可以在C ++应用程序中完成。

答案 6 :(得分:0)

如果你想这样做,你可能正在使用服务器。 在这种情况下,您的主板可能应该是IMPI基板管理控制器。 IPMI可用于远程循环机箱电源。 通常,BMC将拥有自己的IP地址,您可以连接到该IP地址以发送控制消息。