【问题标题】:Programmatically reset Windows XP IDLE time以编程方式重置 Windows XP IDLE 时间
【发布时间】:2011-02-11 00:19:33
【问题描述】:

每次用户触摸键盘或鼠标时,Windows 都会重置空闲时间。我的应用程序需要在特定时刻重置空闲时间,但我不知道如何以编程方式执行此操作。

以下内容不会使用 VB、C# 或 QT4 重置 IDLE 时间。
- 程序化鼠标移动/点击。
- 程序化击键。
Windows 不知何故知道这些操作是模拟的。

如何重置空闲时间?任何想法将不胜感激!

【问题讨论】:

标签: c# vb.net windows qt4


【解决方案1】:

使用SetThreadExecutionState()。 ES_SYSTEM_REQUIRED 选项 (2) 重置系统空闲计时器。访问 pinvoke.net 以获取所需的声明。

【讨论】:

  • 我认为这比安德斯的回答更具体。
  • @Earlz:嗯,他没有具体说明为什么他想重置以及哪个空闲计时器(系统或显示器)例如 cd/dvd 刻录机程序将使用 ES_SYSTEM_REQUIRED 而类似 power point 的程序会指定 ES_DISPLAY_REQUIRED。
【解决方案2】:

例如,如果您需要显示屏保持开启,您可以调用SetThreadExecutionState(ES_DISPLAY_REQUIRED|ES_CONTINUOUS);

在 2000/XP 上,您可以使用 ES_USER_PRESENT 标志(不适用于 Vista+)

要禁用屏保,可以处理WM_SYSCOMMAND的SC_SCREENSAVE(必须是前台窗口,否则使用SystemParametersInfo)

【讨论】:

    【解决方案3】:

    原则上 SetThreadExecutionState() 应该做你需要的。但是我发现在某些现代 Windows 上的某些情况下,它不能与 system required 标志一起使用。抱歉,我不记得确切的细节了。

    作为后备,您可以通过调用 SendInput() 来伪造一些输入,例如使用空鼠标移动消息。我的猜测是您的输入伪造失败,因为您调用了 SendMessage 或 PostMessage。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-14
      • 2023-03-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多