【问题标题】:Detect Idle Time in Multi-Device Application on OSX在 OSX 上检测多设备应用程序中的空闲时间
【发布时间】:2016-03-18 11:42:28
【问题描述】:

我需要检测空闲时间,时间由于用户在他们的机器中输入了任何内容,我之前只为 Windows 制作了这个应用程序,这个功能非常有效:-

function IdleTime: DWord;
var
  LastInput: TLastInputInfo;
begin
  LastInput.cbSize := SizeOf(TLastInputInfo);
  GetLastInputInfo(LastInput);
  Result := (GetTickCount - LastInput.dwTime) DIV 1000;
end;

但是,此功能不适用于多设备应用程序(据我所知)。我已经搞砸了一段时间,并进行了一些严格的谷歌搜索,但无济于事。

目标操作系统是 OS X 和 Windows。

【问题讨论】:

  • GetLastInputInfo 适用于整个用户会话 - 这就是您要找的吗?不仅是您的应用程序,还有任何用户对设备上任何应用程序的输入?
  • 如果是,我认为 FMX 没有为此准备好任何东西。对于 OSX/Win,我希望您需要有条件地使用 WinAPI 来执行此操作,而对于 OSX 可能需要使用 ioreg。这里有一个 shell 脚本示例:stackoverflow.com/a/17966890/327083
  • J,确切地说,我想检测某人何时离开他们的机器 X 时间,在此期间没有输入。我去看看,谢谢:)
  • 移除了 pascal 标记。除非您能告诉我们您正在使用什么普通的旧 Pascal 编译器来执行多设备应用程序,否则 Delphi 或 C++ Builder 将是这里唯一适用的语言标签。请不要随意添加标签,因为其中包含熟悉的单词;这里的标签有特定的含义。如果您不确定标签是否适用,请阅读其说明。如果您仍然不确定它是否适用,请不要使用它。
  • 如果您的目标是 osx,显然您的 Delphi 版本不是 2010。我已将标签更新为 Delphi Seattle。如果我错了,请纠正我。

标签: macos delphi delphi-10-seattle


【解决方案1】:

GetLastInputInfo 在 OSX 上的等价物是 CGEventSourceCounterForEventType

见:https://developer.apple.com/library/mac/documentation/Carbon/Reference/QuartzEventServicesRef/index.html#//apple_ref/c/func/CGEventSourceCounterForEventType

请看这里:Detecting user-activity on mac os x

此调用的 API 接口位于:Macapi.CoreGraphics
因此,您需要将该单位添加到您的使用条款中。

如果你不熟悉 Delphi 下的 OSX 编程,看看:https://delphihaven.wordpress.com

【讨论】:

  • 太棒了,正是我想要的,将此标记为正确答案,也感谢其他所有人的意见。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-19
  • 1970-01-01
  • 2011-08-08
  • 2017-03-13
  • 2011-03-02
相关资源
最近更新 更多