Обнаружение активности пользователя

Мне нужно создать программу, которая контролирует работу компьютера. Например, перемещение мыши, щелчок мышью или ввод с клавиатуры. Мне не нужно записывать, что произошло, только что компьютер используется. Если их компьютер не использовался в течение определенного периода времени, т.е. 15 минут, мне нужно запустить событие.

Есть ли способ получить уведомления об этих событиях?

Ответ 1

Отметьте эту статью, которая может получить время простоя компьютера, а затем вы будете запускать свое событие в произвольном состоянии.

Псевдокод:

If Computer_is_Idle > 15 minutes Then
    Do this
Else
    Do that or Wait more...

Примечание. Исходный код, доступный в статье.

Ответ 2

Спасибо, ЛордКовер. Этот код отсюда. Этот класс берет на себя управление клавиатурой и мышью за вас. Вы можете использовать в таймере, как это:

private void timer1_Tick(object sender, EventArgs e)
{
    listBox1.Items.Add(Win32.GetIdleTime().ToString());
    if (Win32.GetIdleTime() > 60000) // 1 minute
    {
        textBox1.Text = "SLEEPING NOW";
    }
}

Основной код для контроля. Вставьте в свой код формы.

internal struct LASTINPUTINFO
{
    public uint cbSize;
    public uint dwTime;
}

public class Win32
{
    [DllImport("User32.dll")]
    public static extern bool LockWorkStation();

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

    [DllImport("Kernel32.dll")]
    private static extern uint GetLastError();

    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);
    }

    public static long GetLastInputTime()
    {
        LASTINPUTINFO lastInPut = new LASTINPUTINFO();
        lastInPut.cbSize = (uint)System.Runtime.InteropServices.Marshal.SizeOf(lastInPut);
        if (!GetLastInputInfo(ref lastInPut))
        {
            throw new Exception(GetLastError().ToString());
        }

        return lastInPut.dwTime;
    }
}

Ответ 3

Вам нужно установить глобальный крючок клавиатуры и глобальный крючок мыши. Это приведет к тому, что все действия клавиатуры и мыши будут переданы вашему приложению. Вы можете вспомнить время последнего такого события и периодически проверять, если с этого времени прошло более 15 минут.

Посмотрите здесь для примера проекта. Вы также можете найти этот полезный.