windows - 如何在 Windows 中监控用户(内) Activity ?

标签 windows monitoring android-activity

以编程方式检查特定 Windows 计算机当前是否正在被人类使用的最简单方法是什么?

我正在考虑为我们相当有限的互联网连接编写一个“礼貌监视器” - 基本上是一种随时查看当前谁正在积极使用互联网的方法,因此当有人需要下载大文件时,他们可以最大限度地减少对他人的烦恼(并保留这些统计数据的历史记录,以便可以预测上行链路何时不会太滞后)。我正在尝试收集多个证据来源,然后可以使用这些证据来推断 Activity 。

对于 Windows 用户来说,能够查看他们是否正在打字或移动鼠标,或者是否有其他等效的 Activity 度量,将非常有用。我已经考虑过使用 System.Diagnostics.Process类以查看某些进程是否正在运行(在线游戏和其他带宽消耗大的应用程序)以及它们何时启动。我认为,如果在过去半小时内启动了一组常见的用户态进程(firefox、iTunes 等)中的任何一个,那么可以合理地打赌,有一个肉袋坐在椅子上正在做某事。一旦检测到 Activity ,我就会向服务器发送一个微小的 HTTP POST 请求(说“嘿,我还活着,正在做某事!”),并且在我的 Linux 机器上运行的 Web 应用程序会进行更新,以显示用户处于 Activity 状态。

我考虑过使用 IM 状态,但不同的 IM 客户端似乎具有不同级别的操作系统集成 - 而且人们似乎并没有尽可能多地更新这些内容。当然,像所有优秀的 Web 2.0 公民一样,我也在使用 Twitter。 ;)

免责声明:我是一个 UNIX 和 Mac 爱好者,避免使用 Windows。我在 Mono 中摆弄过 .NET,但之前从未接触过 Win32 API。温柔点。

最佳答案

您可能想查看GetLastInputInfo :

The GetLastInputInfo function retrieves the time of the last input event.

这是一个 Windows API 函数,您可以通过 interop 调用:

[DllImport("user32.dll")]
static extern bool GetLastInputInfo(ref LASTINPUTINFO plii);

[StructLayout( LayoutKind.Sequential )]
struct LASTINPUTINFO
{
    public static readonly int SizeOf = Marshal.SizeOf(typeof(LASTINPUTINFO));

    [MarshalAs(UnmanagedType.U4)]
    public int cbSize;    
    [MarshalAs(UnmanagedType.U4)]
    public UInt32 dwTime;
}

编辑:呃,您没有在问题中指定您使用的语言,我只是假设基于.Net,因为您引用了System.Diagonstics.Process

关于windows - 如何在 Windows 中监控用户(内) Activity ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1938218/

相关文章:

php - 如何在 PHP 中监控用户的带宽消耗

Android:杀死每个 Activity 是否相当于销毁整个应用程序?

.net - 通过应用程序解锁Win7桌面

node.js - pm2 - 如果没有启动如何启动,如果启动如何杀死并启动

windows - 如何将 Java 文件安装到 Windows 服务中

mysql - 服务器监控软件-设计数据库MySQL

java - 监控tomcat服务上的JVM

android - zxing 二维码扫描仪摄像头显示白屏

android - 我在最近打开的 Android 应用程序列表中看不到我的应用程序

java - 在 SWT 中获取 Active Shell,即使 Shell 不在焦点上