Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/65.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C:如何检查计算机是否锁定/睡眠?_C_Windows - Fatal编程技术网

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

C:如何检查计算机是否锁定/睡眠?,c,windows,C,Windows,C中是否有任何函数可以检查计算机是否将进入睡眠,休眠或锁定并从这些状态中唤醒 实际上,它们为C,C++提供了服务,但不为C提供服务。 我的操作系统是windows7 下面是我用来检查启动程序和终止程序之间的持续时间的代码(关闭系统将终止程序,这样可以测量持续时间) #包括 #包括 #包括 #包括 时钟开始时间=0; 作废再见(作废) { 文件*读、*写; write=fopen(“F:\\count.txt”,“w”); 时钟结束时间=时钟(); fprintf(写入,“时间:%d”,(结束时间

C中是否有任何函数可以检查计算机是否将进入
睡眠
休眠
锁定
并从这些状态中唤醒

实际上,它们为
C
C++
提供了服务,但不为
C
提供服务。 我的操作系统是windows7

下面是我用来检查启动程序和终止程序之间的持续时间的代码(关闭系统将终止程序,这样可以测量持续时间)

#包括
#包括
#包括
#包括
时钟开始时间=0;
作废再见(作废)
{
文件*读、*写;
write=fopen(“F:\\count.txt”,“w”);
时钟结束时间=时钟();
fprintf(写入,“时间:%d”,(结束时间-开始时间)/每秒时钟数);
fclose(写入);
}
内部主(空)
{
开始时间=时钟();
退欧(再见);
//退出(退出成功);
getch();
}
以同样的方式,我要检查锁定/睡眠/休眠

<>一个可能的方式来包装C++代码(在链接中提供),如@ dCuthor

所提到的
但是在C语言中根本不可能吗?

您提供的链接是关于电源模式改变时发出的信号。所以,很明显,你可以检查系统什么时候将要进入睡眠状态,或者它刚刚醒来


至于检查系统当前是否处于睡眠状态,这是不可能的,因为用户代码在深度睡眠状态下不会运行。可能是一些特定于平台的、非常低级的BIOS API,但这些API通常不是公共的,而且远不是可移植的。

WinAPI通常至少具有与.NET framework相同的可能性。你所要求的是


您必须注册才能使用
RegisterPowerSettingNotification
功能接收。不幸的是,它在GUI应用程序中的使用方式有所不同,在GUI应用程序中,您给窗口一个句柄,该窗口将在每次系统即将更改状态(挂起模式或休眠模式之一)时接收
WM\u POWERBROADCAST
消息,而在非GUI应用程序(通常是服务)中使用它使用SERVICE\u CONTROL\u POWEREVENT的dwControl参数和PBT\u POWERSETTINGCHANGE的dwEventType注册一个
HandlerEx
回调。

棘手的问题,这取决于运行的是什么模式C代码、使用的操作系统等。。例如,在睡眠模式下,一些进程(包括c代码)也将睡眠,因此无法运行和检查睡眠模式,此外,睡眠模式有几个实现需要检查,具体取决于平台和OSHow/处理器睡眠时,您希望函数在何处运行?这就像如何检查您是否死亡一样。如果你死了,你能做到这一点吗?你链接到的示例代码使用来自操作系统的事件(或信号)来处理电源模式已更改的进程,这同样取决于平台和OSsorry我忘记添加操作系统了。更新了问题。不管怎样,它是msdn,所以操作系统是windows。但在C中,我们可以做到这一点。在这个网站上,我们有一个答案。那么为什么不用C?@AnuragChakraborty-再次检查,不是那样的。该链接是关于系统何时从睡眠中醒来的,而不是检测系统是否正在睡觉…BTW您可以将C++代码从示例中解压缩,以便于从C中使用。抱歉,实际上我想计算计算机运行的时间。因此,我需要知道它什么时候睡觉&什么时候醒来up@AnuragChakraborty在这种情况下,你可以使用C++示例代码,使用不透明指针和函数将其封装到C API中,并使用功率模式改变信号来正确地计算运行时间。但它提供了指向MSDN的指针以及要使用的函数、消息和回调类型。完整的答案要长得多,而且超出了我目前的能力。希望它能帮助你开始编写一些代码,这样下一个问题就会更精确,更容易回答,并且有更清晰和文档化的回答。
#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();
}