【问题标题】:Getting System Idle Time with Qt使用 Qt 获取系统空闲时间
【发布时间】:2011-04-24 02:33:00
【问题描述】:

几周前我是 Qt 的新手。我正在尝试用 C++ 重写一个 C# 应用程序,现在已经有了很大一部分。我目前的挑战是找到一种检测系统空闲时间的方法。

在我的 C# 应用程序中,我从如下所示的某个地方窃取了代码:

public struct LastInputInfo
{
    public uint cbSize;
    public uint dwTime;
}

[DllImport("User32.dll")]
private static extern bool GetLastInputInfo(ref LastInputInfo plii);

/// <summary>
/// Returns the number of milliseconds since the last user input (or mouse movement)
/// </summary>
public static uint GetIdleTime()
{
    LastInputInfo lastInput = new LastInputInfo();
    lastInput.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(lastInput);
    GetLastInputInfo(ref lastInput);

    return ((uint)Environment.TickCount - lastInput.dwTime);
}

我还没有学会如何通过 DLL 导入或任何 C++ 等效项来引用 Windows API 函数。老实说,如果可能的话,我宁愿避免他们。此应用程序正在迁移到 Mac OSX,未来可能还会迁移到 Linux。

是否有特定于 Qt 的、独立于平台的方法来获取系统空闲时间?这意味着用户在 X 时间内没有触摸鼠标或任何键。

提前感谢您提供的任何帮助。

【问题讨论】:

    标签: c# qt winapi cross-platform dllimport


    【解决方案1】:

    由于似乎没有人知道,而且我不确定这是否可能,所以我决定设置一个低间隔轮询计时器来检查鼠标的当前 X、Y。我知道这不是一个完美的解决方案,但是...

    1. 无需我执行特定于平台的操作(如 DLL 导入,糟糕),它就可以跨平台工作
    2. 它的用途是我需要它:确定是否有人在积极使用该系统

    是的,是的,我知道在某些情况下可能有人没有鼠标或其他东西。我现在称其为“低活动状态”。够好了。代码如下:

    ma​​inwindow.h - 类声明

    private:
        QPoint mouseLastPos;
        QTimer *mouseTimer;
        quint32 mouseIdleSeconds;
    

    ma​​inwindow.cpp - 构造方法

    //Init
    mouseTimer = new QTimer();
    mouseLastPos = QCursor::pos();
    mouseIdleSeconds = 0;
    
    //Connect and Start
    connect(mouseTimer, SIGNAL(timeout()), this, SLOT(mouseTimerTick()));
    mouseTimer->start(1000);
    

    ma​​inwindow.cpp - 类主体

    void MainWindow::mouseTimerTick()
    {
        QPoint point = QCursor::pos();
        if(point != mouseLastPos)
            mouseIdleSeconds = 0;
        else
            mouseIdleSeconds++;
    
        mouseLastPos = point;
    
        //Here you could determine whatever to do
        //with the total number of idle seconds.
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多