Есть ли способ проверить, не находится ли пользователь в данный момент в режиме ожидания?

В Интернете есть некоторая документация, в которой показано, что Windows изменяет поведение команды NotifyIcon.BalloonTipShown, если пользователь в данный момент находится в режиме ожидания, и это обнаруживается путем проверки событий клавиатуры и мыши . В настоящее время я работаю над приложением, которое проводит большую часть своего времени в системном трее, но время от времени выскакивает несколько всплывающих подсказок, и я бы хотел, чтобы пользователь не пропустил ни одну из них, если они в данный момент находятся вдали от система. Поскольку все отображаемые в данный момент всплывающие подсказки уничтожаются, если отображается новый, я хочу отложить отображение их, если пользователь отсутствует.

Таким образом, есть ли способ проверить, не находится ли пользователь в данный момент в режиме ожидания, если приложение свернуто в системный трей?

21.08.2008 01:15:00
3 ОТВЕТА
РЕШЕНИЕ

Как насчет функции Win32 LASTINPUTINFO ?

using System.Runtime.InteropServices;

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

struct LASTINPUTINFO 
{
    public uint cbSize;
    public uint dwTime;
}
4
11.08.2012 16:00:27
Правильно !!! Я бы просто добавил ссылку на LASTINPUTINFO с помощью LayoutKind.Sequential: pinvoke.net/default.aspx/Structures/LASTINPUTINFO.html
bohdan_trotsenko 12.06.2009 20:34:37

Управляемый код

Проверяйте положение мыши каждую секунду. Если есть новые сообщения для пользователя, держите их, пока не обнаружите какое-либо движение с помощью мыши.

Неуправляемый код

См. Обнаружение простоя с помощью мыши и клавишных крючков

1
21.08.2008 01:18:27

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

0
21.08.2008 14:06:23