Announcement

Collapse
No announcement yet.

Windows-Dienst am Leben erhalten

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Windows-Dienst am Leben erhalten

    Hallo, mal wieder eine Frage von mir.

    Ich habe einen Windows-Dienst geschrieben, der über system hooks auf Tastatuseingaben warten soll und wenn eine bestimmte Tastenkombination gedrückt wurde, dann soll er ein anderes Programm ausführen.

    Der Dienst lässt sich auch installieren und starten. Im Code des Dienstes befinden sich nur die onStart und onStop Methoden (bei beiden werden nur ein paar Variablen gesetzt) und noch eine Methode, die das KeyboardEvent von den system hooks abhandelt.

    Allerdings tut sich nichts, wenn ich die Tastenkombination drücke. Muss so ein Windows-Dienst eventuell mit einer Art Endlosschleife am Leben gehalten werden damit er weiterläuft? Sowas wie

    Code:
    While True
          Thread.sleep(1000)
    End While
    Oder muss das Problem an einer anderen Stelle liegen?

    P.S: ich gehe davon aus, dass auftretende Events durchgelassen und ausgeführt werden können, wenn der Thread sich schlafen legt, stimmt das?

  • #2
    P.S: ich gehe davon aus, dass auftretende Events durchgelassen und ausgeführt werden können, wenn der Thread sich schlafen legt, stimmt das?
    Nein. Wenn der Thread nicht auf Events hört werden die auch nicht abgearbeitet.

    Ein KeyboardHook wird vermutlich nur funktionieren(wenn überhaupt) wenn der Dienst unter dem interaktiven User läuft und du gleichzeitig Interaktion mit dem Desktop zulässt.


    Edit : Du sprichts von system hook. Wäre ein RegisterHotKey (Win32Api ) nicht einfacher?

    Comment


    • #3
      Originally posted by Ralf Jansen View Post
      Ein KeyboardHook wird vermutlich nur funktionieren(wenn überhaupt) wenn der Dienst unter dem interaktiven User läuft und du gleichzeitig Interaktion mit dem Desktop zulässt.
      Dürfte ab Vista nicht mehr gehen, da hier eine strengere Trennung User-Desktop und Dienste-Desktop vorgenommen wurde. Meldungen aus einem Dienst erscheinen auf einen gesondert Eingeblendeten Desktop.

      Comment


      • #4
        Originally posted by Ralf Jansen View Post
        Edit : Du sprichts von system hook. Wäre ein RegisterHotKey (Win32Api ) nicht einfacher?
        Kannst du mir eine gute Quelle nennen, wo ich mich über diese RegisterHotKey informieren kann? Ich kenne das bisher nicht.

        Ich will letztendlich einfach erreichen, dass über einen konfigurierbaren Hotkey ein Programm von mir gestartet wird. Ich will aber nicht diese Strg + Alt + ... Hotkeys nutzen, die ich bei einer Verknüpfung angeben kann, sondern am liebsten sowas wie Windows-Taste + W.

        Das Programm soll dann letztendlich unter Windows 7 laufen. Eine Idee, wie ich da am besten vorgehe?

        Comment


        • #5
          Als Ausgangspunkt eignet sich für die Nutzung der Windows API in .NET am besten PInvoke.net. Von da aus findest du auch das passende in der MSDN falls du RegisterHotKey nicht selbst in der Hilfe findest.

          Die Windows Taste ist eigentlich dem System vorbehalten. Sollte meiner Meinung nach auch so bleiben.

          Comment


          • #6
            Originally posted by Ralf Jansen View Post
            Die Windows Taste ist eigentlich dem System vorbehalten. Sollte meiner Meinung nach auch so bleiben.
            Da hast du schon recht. Jetzt ist es aber so, dass ich das Programm für nen Freund schreibe. Und der wiederrum arbeitet viel mit einem 3D-Animations-Programm. Das Ding steuert er fast ausschließlich mit Shortcuts, dementsprechend werden da viele Tastenkombinationen gebraucht. Wenn ich jetzt einen Hotkey definiere, der in diesem Programm zum Beispiel schon belegt ist, dann öffnet sich jedesmal mein Programm wenn er nur irgendeine Funktion nutzen will, und das soll natürlich nicht passieren.

            Daher dachte ich, mit der Windows-Taste kann man sich recht sicher sein, dass die nicht schon anderweitig belegt sind. Vorausgesetzt man nimmt als zweite Taste nicht Q, E, R, U, L, D, F, usw. Daher wollte ich Windows + W haben.

            Aber es sollte doch kein Problem sein über die Win32-API auch an die Windows-Taste ranzukommen, oder?

            Comment


            • #7
              das nicht es war ja nur ein Einwand dass die Windowstaste eine Systemtaste ist die man eigentlich nicht verwendet.
              Defakto wirst du schon ab XP schwierigkeiten haben mit einem Dienst so etwas zu regeln. Ab Vista und Windows 7 wirds unmöglich sein da dass eine Sicherheitslücke darstellen würde. Es bleibt dir nur die Möglichkeit ein Programm zu schreiben dass über den Autostart läuft und vielleicht eleganter weise ein TaskbarIcon hat also nicht ständig ganz in der Taskleiste liegt sondern als kleines Symbol neben der Uhr auftaucht.
              Unsere Jugend ist unerträglich, unverantwortlich und entsetzlich anzusehen! - Aristoteles

              Comment


              • #8
                RegisterHotKey kann auch mit Windows Taste umgehen. Die Windows Taste wirklich selbst zu benutzen ist halt nur unüblich wird aber nicht verhindert.

                Comment

                Working...
                X