C中是否有任何功能可以检查计算机是否要sleep
,hibernate
或locked
并从这些状态中醒来?
在msdn中,他们提供了C#
,C++
,但没有C
。
我的操作系统是windows7
如下所示,代码我用来检查启动程序和终止程序之间的持续时间(关闭系统将终止程序,这样可以测量持续时间)。
#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();
}
以同样的方式我想检查锁定/睡眠/休眠。
一种可能的方法来包装c中的c ++代码(在链接中提供),如@ddriver所述
但是在C中根本不可能吗?
答案 0 :(得分:5)
WinAPI通常至少与.NET框架具有相同的可能性。您要求的是PowerManagement API。
您必须注册才能使用RegisterPowerSettingNotification
功能接收PowerSettingNotificationEvents。不幸的是,对于一个GUI应用程序,它的使用方式不同,在这个应用程序中,您可以为窗口提供一个句柄,每当系统即将更改状态(其中一个挂起模式或休眠模式)时,该窗口将收到WM_POWERBROADCAST
消息,对于非GUI(通常是服务),它使用SERVICE_CONTROL_POWEREVENT的dwControl参数和PBT_POWERSETTINGCHANGE的dwEventType注册HandlerEx
回调。
答案 1 :(得分:2)
您提供的链接是关于电源模式更改时发出的信号。因此,显然,您可以检查系统何时即将进入睡眠状态,或者它刚刚醒来。
在检查系统当前是否休眠时,这根本不可能,因为用户代码在深度睡眠状态期间根本不会运行。也许是一些特定于平台的,非常低级别的BIOS API,但这些通常不公开,而且远非便携式。