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
-
Mittwoch, 27. Juni 2012 14:22Besitzer
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.
Hallo Heinz Schneider,
Kann folgende eine Erklärung sein? Windows 7 SetWindowsHookEx
Grüße,
Robert
Robert Breitenhofer, MICROSOFT

Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können. -
Donnerstag, 28. Juni 2012 06:35
Lieber Robert Breitenhofer
ich bin der Meinung, dass dies nicht die Ursache sein kann. Wenn ich das Programm, welches den Hook setzt, nicht in der richtigen Session starten würde, würde ja der Hook auch auf WinSta0/Winlogon und WinSta0/Default nicht funktionieren. Er funktioniert aber nur auf WinSta0/Screen-saver nicht.
Trotzdem besten Dank
Heinz
-
Donnerstag, 28. Juni 2012 07:42Besitzer
Hallo Heinz Schneider,
So wie ich das verstehe hast Du einen geschützten Bildschirmschoner mit Kennwort („Whenever a secure screen saver activates, the system automatically switches to the ScreenSaver desktop, which protects the processes on the default desktop from unauthorized users. Unsecured screen savers run on Winsta0\Default.“ - Desktops)
Grüße,
Robert
Robert Breitenhofer, MICROSOFT

Bitte haben Sie Verständnis dafür, dass im Rahmen dieses Forums, welches auf dem Community-Prinzip „Entwickler helfen Entwickler“ beruht, kein technischer Support geleistet werden kann oder sonst welche garantierten Maßnahmen seitens Microsoft zugesichert werden können. -
Donnerstag, 28. Juni 2012 08:28
Hallo Robert
Richtig, das habe ich ja versucht zu erklären. Mein Programm wird (bei Windows 7) auf Session 1 Winsta0/Screen-saver mittels CreateProcessAsUser gestartet, sofern der Bildschirmschoner in Betrieb ist. Wenn hingegen der Rechner einfach blockiert ist (Ctrl-Alt-Del), wird das Programm auf Session 1 WinSta0/Winlogon gestartet. Ansonst erfolgt der Start auf Session 1 Winsta0/Default.
So, und und jetzt will mir einfach nicht in den Kopf, weshalb der Hook, den das Programm setzt, nur beim Bildschirmschoner nicht funktioniert. Vor allem weils bei XP geht und dort ist eigentlich der Unterschied nur der, dass halt das Programm immer in die Session 0 abgesetzt wird.
Einen schönen Gruss aus der Schweiz
Heinz


