C:如何检查计算机是否锁定/睡眠?

时间:2015-08-18 18:32:43

标签: c windows

C中是否有任何功能可以检查计算机是否要sleephibernatelocked并从这些状态中醒来?

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中根本不可能吗?

2 个答案:

答案 0 :(得分:5)

WinAPI通常至少与.NET框架具有相同的可能性。您要求的是PowerManagement API

您必须注册才能使用RegisterPowerSettingNotification功能接收PowerSettingNotificationEvents。不幸的是,对于一个GUI应用程序,它的使用方式不同,在这个应用程序中,您可以为窗口提供一个句柄,每当系统即将更改状态(其中一个挂起模式或休眠模式)时,该窗口将收到WM_POWERBROADCAST消息,对于非GUI(通常是服务),它使用SERVICE_CONTROL_POWEREVENT的dwControl参数和PBT_POWERSETTINGCHANGE的dwEventType注册HandlerEx回调。

答案 1 :(得分:2)

您提供的链接是关于电源模式更改时发出的信号。因此,显然,您可以检查系统何时即将进入睡眠状态,或者它刚刚醒来。

在检查系统当前是否休眠时,这根本不可能,因为用户代码在深度睡眠状态期间根本不会运行。也许是一些特定于平台的,非常低级别的BIOS API,但这些通常不公开,而且远非便携式。