Обнаружение того, что пользователь находится вдали от ПК с .NET - PullRequest
2 голосов
/ 23 декабря 2010

У меня есть настольное приложение, в котором я хотел бы знать две вещи:

  1. Является ли пользователь в данный момент на ПК (точнее, он дает какие-либо данные на ПК), поэтому я могу изменить его состояние на «нет», если это необходимо; и
  2. Работает ли хранитель экрана сейчас, чтобы я мог выполнять более интенсивную работу процессора в течение этого времени.

Я использую C # /. NET. Как бы вы предложили решить эти две задачи?

ПРИМЕЧАНИЕ : вызов WIN32 будет таким же хорошим, как и любое решение с неуправляемым кодом.

Ответы [ 4 ]

5 голосов
/ 23 декабря 2010

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

const int SPI_GETSCREENSAVERRUNNING = 114;

[DllImport( "user32.dll", CharSet = CharSet.Auto )]
private static extern bool SystemParametersInfo( 
   int uAction, int uParam, ref bool lpvParam, 
   int flags );


// Returns TRUE if the screen saver is actually running
public static bool GetScreenSaverRunning( )
{
   bool isRunning = false;

   SystemParametersInfo( SPI_GETSCREENSAVERRUNNING, 0, 
      ref isRunning, 0 );
   return isRunning;
}
5 голосов
/ 23 декабря 2010

http://dataerror.blogspot.com/2005/02/detect-windows-idle-time.html

^ Обнаружение простоя Windows.:)

Включением этой функции является Win32 API GetLastInputInfo () и структура Win32 LASTINPUTINFO.

0 голосов
/ 23 декабря 2010

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

Здесь есть некоторый код, который позволяет вам легко подключаться к .NET: http://www.codeproject.com/KB/cs/globalhook.aspx

0 голосов
/ 23 декабря 2010

Вместо того, чтобы выяснить, когда следует выполнять более интенсивную работу ... Подумайте о том, чтобы выполнить свою "интенсивную работу" как можно раньше, но с более низким приоритетом потока.ответ на чистом C #, если вы не опрашиваете положение мыши и не наблюдаете за движениями ... Или что-то в этом роде.

...