I’m making an application in which I’m implementing auto-monitor turn off when system is idle, i.e. when user is not interacting with the system.
I found a link: http://www.codeproject.com/KB/system/SystemIdleTimerComponent.aspx
it does provides the componenent to know when system is idle. But when I include:
Public WM_SYSCOMMAND As Integer = &H112
Public SC_MONITORPOWER As Integer = &Hf170
<DllImport("user32.dll")> _
Private Shared Function SendMessage(hWnd As Integer, hMsg As Integer, wParam As Integer, lParam As Integer) As Integer
End Function
Private Sub button1_Click(sender As Object, e As System.EventArgs)
SendMessage(Me.Handle.ToInt32(), WM_SYSCOMMAND, SC_MONITORPOWER, 2)
End Sub
It shows this error: Cross-thread operation not valid: Control ‘Form1’ accessed from a thread other than the thread it was created on.
I got LastInputInfo to work in my application by using a timer to retrieve it every 500ms,
the code looks like this :
What MAY be a limitation of this way of doing things is that since times are stored in ticks within a 32bits integer, it ‘only’ works for 50 days after the last reboot of your computer (…).
My guess though is that both the TickCount and the dwTime will wrap when the TickCount wraps, hence no issue, but could not test.