Benutzeräktivität innerhalb eines bestimmten Programmes überprüfen mit VB.Net
Ich versuche für den Betrieb meines Vaters ein Programm zu schreiben, welches ein bestimmtes Programm (z.B "notepad.exe") öffnet und es solange geöffnet lässt, bis der Benutzer mehr als eine viertel Stunde nichts mehr in diesem Programm gemacht hat. Es soll nochmal eine Nachricht geben, in der der Benutzer aufgefordert wird das Programm zu beenden oder wieder zu nutzen, da sonst alle nicht gespeicherten Daten verloren gehen werden.
Ich habe schon einen Versuch gestartet, doch leider überprüft er bei dem Programm die Aktivität im ganzen System und dies ist nicht ganz das Gewollte.
Kann mir bitte zufällig wer helfen? Komme leider selber derzeit nicht weiter, auch wenn ich meine Versuche icht aufgeben werde.
Hier ist mein Programmcode, den ich bis jetzt schon habe:
Ich habe schon einen Versuch gestartet, doch leider überprüft er bei dem Programm die Aktivität im ganzen System und dies ist nicht ganz das Gewollte.
Kann mir bitte zufällig wer helfen? Komme leider selber derzeit nicht weiter, auch wenn ich meine Versuche icht aufgeben werde.
Hier ist mein Programmcode, den ich bis jetzt schon habe:
Public Class Form1
Private Prozess As System.Diagnostics.Process
Private Inaktiv, Meldung, Beenden As Integer
<Runtime.InteropServices.StructLayout(Runtime.InteropServices.LayoutKind.Sequential)> _
Public Structure LASTINPUTINFO
Public cbSize As UInteger
Public dwTime As UInteger
End Structure
<Runtime.InteropServices.DllImport("USER32.DLL")> _
Private Shared Function GetLastInputInfo(ByRef ii As LASTINPUTINFO) As Boolean
End Function
Public Function GetIdleTime() As Long
Try
Dim lastInPut As New LASTINPUTINFO()
lastInPut.cbSize = CUInt(System.Runtime.InteropServices.Marshal.SizeOf(lastInPut))
If GetLastInputInfo(lastInPut) Then
Dim el As Long = lastInPut.dwTime
Dim ui As Long = (Environment.TickCount - el)
' Overflow
If ui < 0 Then
ui = ui + UInteger.MaxValue + 1
End If
Return ui
Else
Throw New ApplicationException("Timespan")
End If
Catch ex As Exception
Beep()
End Try
End Function
Public Function GetIdleTimeSpan() As TimeSpan
Return New TimeSpan(GetIdleTime() * 10000)
End Function
Private Sub Form1_FormClosing(ByVal sender As Object, ByVal e As System.Windows.Forms.FormClosingEventArgs) Handles Me.FormClosing
If Prozess.HasExited = False Then
Prozess.Kill()
End If
End Sub
Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Timer1.Interval = 100 'ms
Timer1.Enabled = True
Prozess = System.Diagnostics.Process.Start("notepad.exe")
End Sub
Private Sub Timer1_Tick(ByVal sender As Object, ByVal e As System.EventArgs) Handles Timer1.Tick
Label1.Text = Me.GetIdleTime.ToString
Inaktiv = Int(Label1.Text)
Meldung = 10000
Beenden = 20000
If Prozess.HasExited = False Then
If Meldung - Inaktiv = 0 Then
MsgBox("Bitte benutzen Sie '...' wieder, da sonst das Programm ohne zu speichern in 10 Sekunden geschlossen wird. Durch diesen Vorgang gehen alle nicht gespeicherten Daten verloren! Sie werden jedesmal nach 10 Sekunden inaktivität aufgefordert, wieder Eingaben zu machen!", MsgBoxStyle.Critical)
ElseIf Beenden - Inaktiv <= 0 Then
Prozess.Kill()
Close()
End If
Else
Close()
End If
End Sub
End Class
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 153815
Url: https://administrator.de/contentid/153815
Ausgedruckt am: 24.11.2024 um 22:11 Uhr
4 Kommentare
Neuester Kommentar