Обнаружение присутствия пользователя - PullRequest
3 голосов
/ 18 июня 2009

Что я хотел бы сделать, это определить, активно ли пользователь использует компьютер под управлением Windows (2000 или более поздняя версия). Желательно, чтобы я делал это, не прибегая к использованию заставок.

История вопроса: у нас есть отдел обслуживания клиентов, который находится в группе поиска и может быть «Доступен» или нет. Если они «Доступны», звонки будут направляться на их телефон, а не сидеть в очереди. Пока телефон звонит по добавочному номеру, входящий абонент слышит «звонящий» звук, а не удерживает музыку. К сожалению, у нас также есть представители, которые забывают взять себя из «Доступного», когда они идут на обед или уходят на день.

Конечный результат, скорее всего, будет написан с использованием .NET

Есть мысли?

Ответы [ 4 ]

3 голосов
/ 18 июня 2009

Для этого следует использовать API GetLastInputInfo ().

2 голосов
/ 18 июня 2009

Если пользователи блокируют свои рабочие станции или если групповая политика вызвала блокировку экрана через некоторое время простоя, вы можете использовать Windows API для подписки на событие «Уведомление о сеансе», используя WTSRegisterSessionNotification и WTSUnRegisterSessionNotification . Как только вы попросите Windows сообщить вашему приложению, что сеанс заблокирован, вы можете использовать это в качестве указания на то, что пользователь отсутствует.

Хорошее чтение: http://support.microsoft.com/kb/310153

Пример:

private const int NOTIFY_FOR_THIS_SESSION = 0x0;
private const int WM_WTSSESSION_CHANGE = 0x2B1;
private const int WTS_CONSOLE_CONNECT = 0x1;
private const int WTS_CONSOLE_DISCONNECT = 0x2;
private const int WTS_SESSION_LOCK = 0x7;
private const int WTS_SESSION_UNLOCK = 0x8;
private const int WM_DESTROY = 0x2;
private const int WM_ACTIVATEAPP = 0x1C;

// The WTSUnRegisterSessionNotification function unregisters the specified 
// window so that the specified window receives no more session-change notifications.
[DllImport("Wtsapi32.dll")]
private static extern bool WTSUnRegisterSessionNotification(IntPtr hWnd);

// The WTSRegisterSessionNotification function registers the specified 
// window to receive session-change notifications.
[DllImport("Wtsapi32.dll")]
private static extern bool WTSRegisterSessionNotification(IntPtr hWnd, Int32 dwFlags);

// The PostQuitMessage function indicates to the system that a thread 
// has made a request to quit. The PostQuitMessage function is typically used in 
// response to a WM_DESTROY message.
[DllImport("user32.dll")]
private static extern void PostQuitMessage(Int32 nExitCode);

[DllImport("user32.dll", CharSet = CharSet.Auto)]
public static extern IntPtr PostMessage(HandleRef hwnd, int msg, int wparam, int lparam);

private void Unsubscribe() {
   if (this.Handle != IntPtr.Zero) {
      WTSUnRegisterSessionNotification(this.Handle);
   }
}

private void Subscribe() {
   if (this.Handle != IntPtr.Zero) {
      WTSRegisterSessionNotification(this.Handle, NOTIFY_FOR_THIS_SESSION);
   }
}

// override WndProc in order to catch process the Session-Notification events:
protected override void WndProc(ref Message m) {
   switch (m.Msg) {
      case WM_WTSSESSION_CHANGE:
         switch (m.WParam.ToInt32()) {
            case WTS_CONSOLE_CONNECT:
               // User-switch : Sign-on
               break;
            case WTS_CONSOLE_DISCONNECT:
               // User-switch : Sign-off
               break;
            case WTS_SESSION_LOCK:
               // Screen Lock
               break;
            case WTS_SESSION_UNLOCK:
               // Screen Unlock
               break;
            default:
               break;
         }
         break;
      default:
         break;
   }

   base.WndProc(ref m);
}
0 голосов
/ 18 июня 2009

Взгляните на SetWindowsHookEx и класс WH_FOREGROUNDIDLE.

0 голосов
/ 18 июня 2009

Вы можете использовать Windows API, чтобы добавить низкоуровневый хук клавиатуры / мыши, затем пометить как удаленный, если какое-то время не было активности, и пометить как доступный, когда действие начнется снова.

http://www.codeproject.com/KB/cs/globalhook.aspx что-то есть, но это в C #.

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