利用命令行让Windows进入待机(stand by)状态

经济危机下大家都在想办法开源节流,开源当然不是那么简单的,这要是容易的话也不用等到现在这年月。所以更多公司都是在节流这方面打主意。

公司最近的一条措施就是号召大家下班后尽量都把电脑设置成待机状态(之所以不关机的原因之一是重启机器后载入某些软件的时间实在是太长,谁叫现在的软件越做越大呢?),这个号召大家响应还是蛮积极的,毕竟电省下来不仅给公司节约了不必要的开销,同时也是为创建节约型社会做点贡献:)

不过就这么一个小要求我还真碰到点困难。因为我有两台机器共享一台显示器,平常两台一起用的话要么是开远程桌面快速切换,要么是通过一个硬件开关在键盘上直接切换。好了,问题来了,如果我要同时让两台机器都stand by,我总是需要先stand by其中一台,让后再换另一台(好像有点废话……)。这种情况用远程桌面是不行的,因为远程桌面下我发现XP系统的开始菜单里面只有注销的按钮,找不到关闭按钮,所以是没办法stand by的。如果用键盘切换的话也有问题,因为stand by状态下的机器收到键盘消息后会被激活,所以这样也不行。

为了把电省下来,只有想办法了。我首先想到的看看著名的shutdown命令有没有这样的功能,毕竟都是在干类似的事情。不过很遗憾,查了下资料,shutdown只能关机,没办法通过指定参数用它来让系统待机。继续搜索,终于找到了一个方案,命令如下:

 

rundll32.exe powrprof.dll,SetSuspendState 0,1,0

 

rundll32.exe这个程序俺是知道的,是一个dll的loader,反正windows下dll最终都是要LoadLibrary+GetProcAdress后才能运行的。powrprof.dll这个dll顾名思义应该是负责电源管理的模块,后面那个SetSuspendState是里面的一个函数,查了下它的原型如下:

BOOLEAN WINAPI SetSuspendState(
  __in  BOOLEAN Hibernate,
  __in  BOOLEAN ForceCritical,
  __in  BOOLEAN DisableWakeEvent
);
所以后面的三个参数意义应该一目了然了。
Okay,保存一个.cmd文件在桌面上,就可以直接在远程桌面里面stand by了,搞定。

你可能感兴趣的:(windows,Hibernate,XP,dll,winapi)