Определение активности пользователя - PullRequest
10 голосов
/ 09 марта 2011

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

Можно ли как-то получить уведомление об этих событиях?

Ответы [ 3 ]

8 голосов
/ 09 марта 2011

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

Псевдокод:

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

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

8 голосов
/ 27 октября 2012

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

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;
    }
}
0 голосов
/ 09 марта 2011

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...