Abfrage ob Aktivität am PC vorhanden

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von RISSN.

    Abfrage ob Aktivität am PC vorhanden

    Hallo,

    ich brauche Hilfe bei folgendem Problem. Ich brauche ein kleines Programm, wo ich feststellen kann, ob jemand am PC arbeitet, egal welche Aktivität, Maus oder Tastatur.
    Wenn niemand arbeitet für vielleicht 5 Minuten, dann möchte ich einen Dienst anhalten und wenn es wieder Bewegung gibt, dann den Dienst wieder starten.

    Wäre das möglich?

    Über eure Hilfe wäre ich wirklich dankbar.
    Na, letztenendes geht es doch nur um den Aufruf der externen DLL-Funktion

    C#-Quellcode

    1. [DllImport("User32.dll")]
    2. private static extern bool GetLastInputInfo(ref LASTINPUTINFO lii);
    3. public static uint GetIdle()
    4. {
    5. var lii = new LASTINPUTINFO();
    6. lii.cbSize = Convert.ToUInt32(Marshal.SizeOf(lii));
    7. GetLastInputInfo(ref lii);
    8. return Convert.ToUInt32(Environment.TickCount) - lii.dwTime;
    9. }


    Oder präziser:

    C#-Quellcode

    1. [DllImport("User32.dll")] private static extern bool GetLastInputInfo(ref LASTINPUTINFO lii);
    2. //[…]
    3. GetLastInputInfo(ref lii);

    Alles andere ist doch nur dafür da, um ein Beispielprogramm zu erhalten. Oder eben diese Funktion zum Laufen zu bringen, da LASTINPUTINFO ja ein eigener Typ ist.
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.
    Pack Dir einen Timer (Timer1) und einen Button (Button1) auf's Form. Und dann

    VB.NET-Quellcode

    1. Friend Class Form1
    2. <Runtime.InteropServices.DllImport("User32.dll")> Private Shared Function GetLastInputInfo(ByRef lii As LASTINPUTINFO) As Boolean : End Function
    3. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    4. Timer1.Start()
    5. End Sub
    6. Public Function GetIdle() As UInteger
    7. Dim lii As New LASTINPUTINFO()
    8. lii.cbSize = Convert.ToUInt32(Runtime.InteropServices.Marshal.SizeOf(lii))
    9. GetLastInputInfo(lii)
    10. Return Convert.ToUInt32(Environment.TickCount) - lii.dwTime
    11. End Function
    12. Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
    13. Label1.Text = GetIdle().ToString
    14. End Sub
    15. End Class
    16. Friend Structure LASTINPUTINFO
    17. Public cbSize As UInteger
    18. Public dwTime As UInteger
    19. End Structure
    Dieser Beitrag wurde bereits 5 mal editiert, zuletzt von „VaporiZed“, mal wieder aus Grammatikgründen.

    Aufgrund spontaner Selbsteintrübung sind all meine Glaskugeln beim Hersteller. Lasst mich daher bitte nicht den Spekulatiusbackmodus wechseln.