Ich verwalte eine Vielzahl von verwalteten Benutzerbibliotheken auf einem Universitätsgelände. Auf diesen Rechnern läuft derzeit Windows XP und wir haben einen Windows-Dienst, der dazu dient, einen Computer zu "sperren", indem er jegliche Tastatur- oder Mauseingabe blockiert. Die Sperrung erfolgt während der Installation des Skript-Betriebssystems, sodass Benutzer den Prozess nicht versehentlich anhalten oder unterbrechen können. Es wird auch verwendet, um zu verhindern, dass Benutzer sich an Computern anmelden, bis sie an der Rezeption eines bestimmten Labs ausgecheckt werden. Strg + Alt + Entf ist über einen Tastaturfilter-Treiber blockiert und der Rest der Tasten und Maus sind derzeit mit der Funktion BlockInput() von user32.dll blockiert.Blockieren der Mauseingabe von einem Dienst in Vista
In XP wird der Dienst als lokales System ausgeführt, und das Kontrollkästchen für "Interaktiv mit dem Desktop interagieren" muss vom BlockInput() - Aufruf aus aktiviert werden, um erfolgreich zu sein. Unter Vista funktioniert das nicht mehr ich vermute wegen der Session 0 isolation Änderungen. Der Aufruf ist erfolgreich, aber die Eingabe ist nicht blockiert.
Der Tastaturfiltertreiber funktioniert immer noch gut und wir können das verwenden, um die gesamte Tastatur statt nur Strg + Alt + Entf zu blockieren. Aber ich weiß nicht, wie wir die Maus jetzt blockieren sollen. Ich bin nicht einmal ganz sicher, ob die Isolation in Session 0 schuld ist.
Kann jemand eine Fehlerbehebung oder eine Problemumgehung empfehlen, um die Mauseingabe von einem Dienst in Vista und darüber hinaus zu blockieren? Ich habe nach alternativen Win32-APIs ohne Glück gesucht. Geht man davon aus, dass die Isolation von Sitzung 0 die Schuld trägt, gibt es einen legitimen Weg, die Funktion von Sitzung 1 aus aufzurufen, oder würde dies den Zweck der Isolation vereiteln? Muss ich mich auf eine erweiterte Companion-Exe verlassen, die bei der Benutzeranmeldung ausgeführt wird und mit dem Dienst kommuniziert?
Ich hatte noch keine Chance, dies noch zu testen. Das Problem könnte sein, dass der Konsolenbenutzer kein privilegiertes Konto ist und der BlockInput-Aufruf fehlschlägt. –
BlockInput sollte immer noch funktionieren, ich glaube nicht, dass es Berechtigungen erfordert. – Michael
Ich schrieb eine einfache Konsole App, um den Anruf als eingeschränkter Benutzer in Vista zu testen, und es hat nicht funktioniert. Ich vergesse, ob der Anruf fehlgeschlagen oder erfolgreich war und einfach nicht funktioniert hat. Die App hoch zu laufen hat gut funktioniert. –