問題 Hook auf Bildschirmschoner

  • Mittwoch, 27. Juni 2012 12:27
     
     

    Tönt etwas seltsam, deshalb zuerst der Hintergrund. Unser Alarmierungstool soll über eine Tastenkombination einen stillen Alarm auslösen können.

    Das funktioniert unter XP auf allen möglichen Desktops, unter W-7 schaffen wir es aber nicht, den Hook auf den Winsta0/Screen-saver Desktop zu setzen. Wie funktioniert das Ganze. Ein Service lanciert über CreateProcessAsUser ein unsichtbares Programm auf den jeweils gerade aktiven Desktop (Default, Winlogon oder Screen-saver). Dieses Programm seinerseits setzt den Tastaturhook. Die Hook-DLL meldet übrigens nur die relevante Tastenkombination direkt an den Service. Das Programm prüft nun mittels Timer periodisch, ob der Desktop geändert hat. Wenn ja, meldet es dies an den Service, beendet den Hook und beendet sich selbst.

    Und nun beginnt das Spiel von vorne. Der Service reagiert auf die Meldung des abgetretenen Programms und startet es gleich wieder auf dem neuen Desktop.

    So weit so gut. Unter XP funktioniert das alles. Wir mussten zwar beim Bildschirmschoner noch etwas 'üben' denn der Hook bewirkt ja nicht, dass durch die Tastenkombination der Bildschirmschoner nicht unterbrochen würde. Der Kniff ist aber 'einfach' der, den Bildschirmschoner sofort wieder zu starten. Wenn jemand wissen will, wie man es bewerkstelligt, dass vom Service lancierte Programm (SYSTEM -User) den Bildschirmschoner startet, der gerade lief, kann er sich gerne bei mir melden.

    Nun zu W-7. Wie gesagt, bei Winlogon und Default - Desktop alles kein Problem. Aber das Seltsame ist nun wirklich das, dass sich das Programm vom Service aus auch auf dem Screen-Saver-Desktop starten lässt und dass sich der Hook setzen lässt. Nur reagiert dieser einfach nicht.

    Am Typ Bildschirmschoner liegt es übrigens nicht. Wir haben dieselben Bildschirmschoner getestet, die auf XP funktionieren. 

    Wenn mir da jemand einen Hinweis oder eine Idee hätte, wäre ich dankbar. Ich nun schon Tage mit diesem Problem verbraten.

Alle Antworten