C中是否有任何函数来检查计算机是否正在sleep
, hibernate
或locked
并从这些状态中唤醒?
在msdn中,它们提供了C#
, C++
但不提供给C
我的操作系统是Windows7
下面是我正在使用的代码来检查启动程序和终止之间的时间间隔(closures系统将终止程序,这样可以测量这种方式的持续时间)。
#include <stdio.h> #include <stdlib.h> #include <conio.h> #include<time.h> clock_t start_time=0; void bye (void) { FILE *read,*write; write=fopen("F:\\count.txt","w"); clock_t end_time=clock(); fprintf(write,"Time: %d",(end_time-start_time)/CLOCKS_PER_SEC); fclose(write); } int main (void) { start_time=clock(); atexit (bye); //exit (EXIT_SUCCESS); getch(); }
以同样的方式,我想检查locking/睡眠/hibernate。
一种可能的方式,就像@ddriver所提到的那样在c中包装c ++代码(在链接中提供)
但是在C中根本不可能?
WinAPI至少具有与.NET框架相同的可能性。 你要求的是PowerManagement API 。
您必须注册才能使用RegisterPowerSettingNotification
函数接收PowerSettingNotificationEvents。 不幸的是,对于一个GUI应用程序来说,它的使用方式是不同的,在这个GUI应用程序中,每当系统即将改变状态(挂起模式或休眠模式之一)时,给出一个窗口的句柄,然后该窗口将接收WM_POWERBROADCAST
消息, GUI(通常是一个服务),注册一个HandlerEx
回调函数,参数为SERVICE_CONTROL_POWEREVENT,dwEventType为PBT_POWERSETTINGCHANGE。
您提供的链接是关于电源模式改变时发出的信号。 所以,显然,你可以检查系统何时要睡觉,或者刚醒来。
至于检查系统是否处于睡眠状态,这是不可能的,因为用户代码在深度睡眠状态下不会运行。 也许一些特定于平台的,非常低级别的BIOS API,但这些通常不公开,而且远不是便携式的。