2011-09-22 65 views
0

我需要找到从C++应用程序打开电脑, 有没有办法做到这一点? 谢谢C++应用程序函数打开计算机有没有办法?

+5

如果计算机关闭,应用程序将如何运行?或者这是一台远程机器? –

+0

无法想象可以按下物体正面的按钮或墙上的开关的功能。 –

+0

你在哪个操作系统上? ACPI中有一个在给定时间启动计算机的功能,并且linux下有一个选项可通过/ proc/acpi/alarm设置此时间。我不知道这是如何在Windows下工作。 – jdm

回答

5

如果计算机处于关闭状态,它不能被执行的代码,因此不能自行开启编程。

ACPI有些变化,但对于我们能够提供帮助,您必须更具体地了解您的具体要求。

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

+0

这只是部分真实的,因为(我猜)2002年大多数个人电脑有ACPI,可以设置硬件计时器。即使您的计算机处于“关闭”状态,主板实际上会拉动少量电源为网卡供电,监听键盘输入(唤醒LAN,唤醒键盘等),或等待计时器。不幸的是,我的经验是,当我尝试时,这个功能不是很可靠,但我希望现在可能已经改变。 – jdm

+0

我在个人电脑的BIOS中配置了一个计时器,可以在每个工作日同时打开电脑,并且工作正常且可靠。 –

1

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

+0

这与这个问题无关...... – jdm

+6

是的,但是这个笑话的机会太好了。 – thiton

+1

哈哈哈 - 花了我一分钟...非常好.. :) – Nim

1

你怎么可以把一台计算机上从应用程序中,当没有进程在其上运行时,它的关闭?您可以打开另一台电脑(Wake on Lan),但不能打开您正在运行的电脑。

3

你将不能够写一个程序打开电脑上的程序本身被安装上。

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

网络唤醒通过发送到Magic Packet的网卡。文章概述了有效载荷的细节。

2

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

在windows下做的一种方法是用CreateWaitableTimer()创建一个定时器,设置时间为SetWaitableTimer(),然后做一个WaitForSingleObject()。您的代码将暂停,并且您可以将计算机置于待机状态(也可能是休眠状态,但不会关机)。当到达定时器时,PC将恢复,程序也将恢复。

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

我必须添加,您还可以使用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/

+1

CreatewaitableTimer是正确的答案。将fResume参数设置为SetWaitableTimer为TRUE。 –

0

机会是,如果你想这样做,你与服务器的工作。 在这种情况下,您的主板可能需要IMPI底板管理控制器。 IPMI可用于远程循环机箱电源。 通常,BMC将拥有自己的IP地址,您可以通过它连接发送控制消息。

相关问题