Отслеживание активности работы на компьютере

AAAAAAAmidi

Привет. Есть задача: сделать таймер, который отслеживает активность работы на компьютере, т.е. (к примеру) если *дцать минут пользователем не "трогается" мышка/тачпад/кнопки, то переводим компьютер в спящий режим. Соответственно, если "трогается", то таймер опять взводим на *дцать минут. MouseMove и прочее посмотрел, но это актуально для работы в конкретной форме, а для этой задачи форма вообще висит где-то в фоне и не активна.Вопрос: Что почитать, где найти информацию по этому направлению?Спасибо
14 ответов

AAAAAAAmidi

AAAAAAAmidi, используйте не MouseMove, а запоминайте позицию курсора и сравнивайте ее с предыдущей. Вроде так
Cursor.Position(x,y)


AAAAAAAmidi

Да, отлично. на ютьюбе есть отличный компактный пример.Итак, я сделал это. Все действо заняло +15 минут. Форма, два таймера. Один ведет countdown, по истечении которого выполняем SetSuspendState. Второй таймер отслеживает курсор, и (если он меняет координаты), скидывает таймер на начало (берем значение из поля ввода). Благодарю.


AAAAAAAmidi

Пользователь может и не трогать курсор, но работать за компомКласс:
Public Class IdleTime
 
    Private Declare Function GetLastInputInfo Lib "User32.dll" _
      (ByRef lastInput As LASTINPUTINFO) As Boolean
 
    <StructLayout(LayoutKind.Sequential)> _
    Public Structure LASTINPUTINFO
        Public cbSize As Int32
        Public dwTime As Int32
    End Structure
 
    Public ReadOnly Property IdleTime() As Integer
        Get
            Dim lastInput As New LASTINPUTINFO
            lastInput.cbSize = Marshal.SizeOf(lastInput)
            If GetLastInputInfo(lastInput) Then
                Return (Environment.TickCount - lastInput.dwTime) / 1000
            End If
        End Get
    End Property
End Class
Юзинг
Imports System.Runtime.InteropServices
 
Public Class Form1
    Dim IT As New IdleTime
 
    Private Sub Timer1_Tick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Timer1.Tick
        Me.Text = IT.IdleTime
    End Sub
End Class


AAAAAAAmidi

Памирыч, так даже лучще, чем вручную следить за нажатиями коавишь и движениями мышки.. 5+


AAAAAAAmidi

Yury Komar, как говорится, все уже изобретено)


AAAAAAAmidi

Памирыч, это так, и не поспоришь Но не все ищут легких путей, ведь иногда хочется и своего чего-то слепить, а не пользоваться готовым Вот например случайный сдвиг мышки на 5-10 пикселе иногда совсем не кстати... и его можно предоивратить, когда свое чудо мастеришь...


AAAAAAAmidi

Ну если есть время и желание - так почему бы нет. Главное, чтобы работало


AAAAAAAmidi

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


AAAAAAAmidi

на ютьюбе есть отличный компактный пример.
а ссылкой не поделитесь?


AAAAAAAmidi

Да это я добавил в проект, а как узнать о том что идёт скажем плеер видео воспроизводит или еще что работает на полный экран? А то свою заставку не запускать не получится уже.


AAAAAAAmidi

а ссылкой не поделитесь?
Да сколько угодно)) https://www.youtube.com/watch?v=JI4x2d7C9XQесли хотите, могу готовую программку выложить-расшарить (я ее перекомпилировал под нет фреймворк 2, кстати, чтобы работало и на машинах, где не поставлен более новый). Программа 300 кб, основная часть из которых - иконка)).Код выше - отличный, но в моем случае вполне хватило как раз отслеживания мышки. Еще б неплохо было доработать, чтобы таймер запускался автоматом при выходе компьютера из сна. Но это уж потом.


AAAAAAAmidi

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


AAAAAAAmidi

проверку на предмет того, ушел комп в сон или не
Хорошая мысль... Я думал сделать какой-то флаг, устанавливаемый во время команды "увести компьютер в сон". После пробуждения - "если флаг установлен и мышь стала активна, то сбросить флаг и перезапустить таймер"


AAAAAAAmidi

если хотите, могу готовую программку выложить-расшарить (я ее перекомпилировал под нет фреймворк 2, кстати, чтобы работало и на машинах, где не поставлен более новый). Программа 300 кб, основная часть из которых - иконка)).
Выкладывай