Windows 7 Lockscreen

  • Moin zusammen,

    ich habe ein Anliegen, eventuell könnt ihr helfen oder es sofort "zerschlagen".

    Bei uns ruft ein Programm eine Infomeldung auf. Nun ist diese aber natürlich nicht zu sehen, wenn der Rechner gesperrt ist. Weiß jemand eine Möglichkeit, im Lockscreen von Win 7 eine Meldung anzuzeigen? Wichtig: Die Meldung kann auch im gesperrten Betrieb erst auftauchen, ist also nicht unbedingt schon vor dem sperren zu sehen (autom. Sperre des Bildschirms nach x Minuten).

    Ich habe diverse Ideen/Varianten (Info über eine "Fehlermeldung", Logininformation, Hintergrund vom Lockscreen ändern) bereits durch, aber alles würde eine Neuanmeldung benötigen (Login & Logoff). Da aber Windows die Tastenkombination Strg+Alt+Entf sperrt (man kann sie nicht über ein Programm aufrufen), ist die Anmeldung und Abmeldung nicht möglich. Fällt mir hier aktuell nichts mehr ein. Ein Neustart des PC's kommt nicht in Frage.

    2 Mal editiert, zuletzt von Moombas (27. August 2018 um 12:15)

  • Ich hab mal gesucht und das folgende gefunden:

    1. https://www.techrepublic.com/blog/windows-a…s-logon-screen/

    Dies zeigt beim wechseln des Benutzers eine Nachricht an, leider funktioniert dies nicht beim Sperrbildschirm und es muss vorm Benutzerwechsel gesetzt sein...

    2. Die andere, bessere Möglichkeit wäre GINA. Das ist eine dll, die sich um das darstellen des Windowslogins kümmert. Dazu müsstest du allerdings eine .dll erstellen (z.B. in C/C++), diese muss die originale ersetzen. Teilweise können auch Hooks angelegt werden. Das ganze ist auf jedenfall recht kompliziert.

    Hier ein paar Links dazu:

    Hier sieht man ganz schön den Aufbau:

    https://www.paralint.com/projects/aucun/index.html

    Details:

    https://docs.microsoft.com/en-us/windows/…p/secauthn/gina

    https://docs.microsoft.com/en-us/windows/…mizing-winlogon

    https://msdn.microsoft.com/en-us/library/…3(v=vs.85).aspx

    Ich hab mir das jetzt auch nur grob angeschaut, das wäre auf jedenfall eine kompliziertere Aufgabe, ich glaub es gibt auch recht wenig dazu zu finden, also viel ausprobieren ;).

    Mfg Kanashius

  • Moin Kanashius,

    danke schon mal für die Mühe. Aber ich denke das übersteigt meine Fähigkeiten bzw. Aufwand/Nutzen.

    Gibt es eventuell etwas mit dem ich die Anzeige "refreshen" (neu "zeichnen") kann? (WM_PAINT ?)

    Gedachter Effekt: Sperrbildschirm-Hintergrund ändern, Anzeige refeshen um evtl. das neue Hintergrundbild zu zeigen?

    Auch nach dem Screensaver wird leider nicht neu gezeichnet :(

    Es scheint hier wohl kaum Möglichkeiten zu geben.

    Einmal editiert, zuletzt von Moombas (28. August 2018 um 10:47)

  • Wäre dies ggf. möglich mit der Funktion redrawwindow?

    hwnd 0 bekomme ich, wenn ich auf dem Lockscreen bin (0 ist auch der Desktop; ka. ob dies auch auf den Lockscreen Auswirkungen hätte) allerdings bekomme ich diese Funktion nicht zum laufen.

    2 Mal editiert, zuletzt von Moombas (28. August 2018 um 15:48)

  • Die GUI des Sperrbildschirms läuft nicht auf deinem Benutzeraccount. Schon alleine deswegen kann ein Script, das im Kontext deines Benutzers läuft diese GUI aus gutem Grund nicht manipulieren. Desweiteren ist es nicht möglich die GUI zu überlagern, da der Sperrbildschirm ja genau das unterbindet... alle GUI Elemente deines Benutzeraccounts werden ausgebelendet. Wenn man den Sperrbildschirm manipulieren möchte muss dein Script im Kontext des Users SYSTEM laufen.

    Anstatt so tief in Windows interna Einzugreifen und ggf. sogar eine Massive Sicherheitslücke zu öffnen würde ich mir an deiner Stelle eher Gedanken machen was du eigentlich warum erreichen willst. Wozu muss irgendjemand informiert werden wenn doch garniemand am Rechner ist? Der Rechner ist gesperrt, also arbeitet da auch niemand, der deine Meldung lesen könnte. Davon ab werden Änderungen an Systemdateien früher oder später zu Problemen führen, spätestens dann wenn Windows den Eingriff erkennt und versucht dein System wieder in Originalzustand zu versetzen.

    Wenn die aktive Useranmeldung stört schreib dir lieber ein Script, dass den Benutzer sauber nach x Minuten Inaktivität abmeldet. Das kann auch problemlos passieren solange der Account angemeldet und gesperrt ist, bzw. evtl. sogar ganz ohne Script über die Computer- / Benutzer- / Gruppenrichtlinien festgelegt werden.

  • Ahja... Windows spielt übrigens Ton des angemeldeten Benutzeraccounts auch dann ab wenn der Account gesperrt ist. Eine Audio Benachrichtigung wäre also jederzeit möglich, sofern das System über aktive Lautsprecher verfügt.

    Beispiel:

    Code
    Run("rundll32.exe user32.dll,LockWorkStation")
    
    While 1
        Sleep(2000)
        SoundPlay(@WindowsDir & "\media\tada.wav",1)
        SoundPlay("")
    WEnd

    EDIT: Falls das Script keinen Ton abspielt prüfe ob die verwendete Tondatei auf deinem Betriebssystem existiert und falls nicht ersetze den Aufruf durch eine vorhandene Datei. Unter Windows 7 existiert dieser Systemton jedenfalls.

  • ...Wozu muss irgendjemand informiert werden wenn doch gar niemand am Rechner ist? Der Rechner ist gesperrt, also arbeitet da auch niemand, der deine Meldung lesen könnte. ...

    Das ist nicht ganz richtig. Es arbeitet zwar dann in dem Moment niemand AM Rechner, jedoch in dessen Umgebung. Leider ist in dieser Umgebung auch Kundenbewegung, weshalb die Rechner aus Datenschutzgründen gesperrt werden sollen. Im Hintergrund jedoch läuft ein Programm, welches jederzeit wichtige Informationen anzeigen könnte (Reservierungen etc.). Durch die Sperre ist das jedoch nicht mehr zu sehen.

    Natürlich will niemand neue Sicherheitslücken schaffen. Daher hatte ich ja gehofft, "einfach" den Hintergrund des Sperrbildschirms zu ändern (was im Grunde einfach ist aber ein Problem mit sich bringt). Dieser aktualisiert sich jedoch erst, wenn der PC einmal entsperrt und wieder gesperrt wird und funktioniert daher leider nicht/zu spät. Daher die Idee mit dem "neuzeichnen" des kompletten Bildschirminhaltes (einmalig) wenn die angesprochene Meldung kommt, um das Hintergrundbild vom Sperrbildschirm neu zu zeichnen, in der Hoffnung, das er dann auch das neue Bild übernimmt.

    Ich denke das ein ständiges Abspielen eines Tons (wenn auch "nur" alle X Sekunden) nervig auch für die Kunden ist und kommt daher nicht in Frage. Zudem sind die Lautsprecher aktuell abgeschaltet.

    2 Mal editiert, zuletzt von Moombas (29. August 2018 um 09:26)

  • Moin.

    Ich habe für meinen Rechner mal was ähnliches gewünscht und habe mir damals den Sperrbildschirm nachgebaut. Ich habe also so getan, als wäre der Schirm von Windows gesperrt aber dabei hatte ich ihn manuell „versperrt“ und konnte somit immer noch dazwischen funken. Allerdings wirst Du das nicht mit den Tasten Stgr+Alt+Del oder Win+L hinbekommen, denn diese sind für Windows reserviert. Da ich aber der einzige User an diesem Rechner war ging das problemlo.

    Weitere Möglichkeit, die mir einfällt: Du könntest einen zweiten kleinen Rechner mit Bildschirmchen daneben stellen. Du vernetzt die beiden. Der gesperrte kann weiter Infos in eine gemeinsam geteilte ini schreiben und der Inforechner wertet diese aus.

    Gruß, Simpel

    SciTE4AutoIt = 3.7.3.0 AutoIt = 3.3.14.2 AutoItX64 = 0 OS = Win7Pro SP1 OSArch = X64 Language = 0407/german

    H:\...\AutoIt3\SciTE H:\...\AutoIt3 H:\...\AutoIt3\Include (H:\ = Network Drive)

    86223-publicdomain-88x31-png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind.

  • Für deine Idee bräuchte man nicht mal einen 2. PC, sondern "nur" ein 2. Display. Da dies aber nicht nur 1 Standort, sondern Standorte im 4 Stelligen Bereich betrifft, wirst du dir denken können, dass dies ein Kostenaufwand (Display + Technikereinsatz zum Aufbauen und Einrichten) wäre, der "nur" für so etwas nicht tragbar wäre.

    Einmal editiert, zuletzt von Moombas (29. August 2018 um 10:06)

  • Das 2. Display wäre ebenso gesperrt (aber schwarz). Dort wäre somit auch nichts zu sehen.

    SciTE4AutoIt = 3.7.3.0 AutoIt = 3.3.14.2 AutoItX64 = 0 OS = Win7Pro SP1 OSArch = X64 Language = 0407/german

    H:\...\AutoIt3\SciTE H:\...\AutoIt3 H:\...\AutoIt3\Include (H:\ = Network Drive)

    86223-publicdomain-88x31-png Any of my own code posted anywhere on the forum is available for use by others without any restriction of any kind.

  • Das kommt auf die Art des Displays an. Wäre dies normal an die Graka angeschlossen, hast du recht. Wäre dies aber ein USB-Display liegst du falsch. Aber wie gesagt, das kommt alleine aus Kosten gründen nicht in Frage.

  • Oder du machst es so... dass du die Rechner nach x Minuten nicht durch Windows sperren läßt, sondern mit einem eigenen AutoIt-Script. Denn dann kannst du dir auch beliebige Infos bei gesperrtem Bildschirm anzeigen lassen.

    Die BlockInputEx-UDF ist dafür sicher gut geeignet...

  • Naja bei einer Standortanzahl im 4-Stelligen Bereich sollte eine professionelle Lösung doch finanziell kein Problem darstellen. Ein selbstgestrickter Sperrbildschirm der viel einfachher umgehbar wäre als das Original kommt bei so einer Unternehmensgröße ja wohl eher nicht in Frage.

    Würde da eher eine serverbasierte Lösung wählen. Irgendwo kommen die "Reservierungen" ja her... vermutlich zentral von einer Webanwendung oder einem darunter liegenden Emailsystem. Deine Anwendung könnte also theoretisch an zentraler Stelle alle "Reservierungen" einsehen und dann weitere Aktionen damit durchführen. z.B. ein Displayterminal in jedem Standort aktualisieren, vergleichbar mit den Displays in McDonalds Fillialen. Das würde zwar immernoch ein zusätzliches Gerät je Standort bedeuten, aber umsonst ist nunmal nichts und ein kleines Tablet irgendwo an der Wand hinter dem Tresen kostet wirklich nicht die Welt.

    Alternativ könnte dein Script auch die zuständigen Mitarbeiter direkt kontaktieren. Heute hat jeder ein Smartphone... sei es privat oder dienstlich. Kleine geschäftliche App die sich durch vibrieren bemerkbar macht und damit signalisiert... "schau auf deinen Rechner" sollte ja langen.

    Weiterer Vorschlag... es gibt USB leuchten, die farblich signalisieren könnten wenn der Nutzer neue Nachrichten am Rechner hat. Wäre deutlich günstiger als ein Tablet oder Display. Alternativ dazu gibt es auch simple und billige LCD Laufbänder ohne viel Grafik Schnickschnack, die via USB angesteuert werden können. Was da für euch in Frage kommt und am besten automatisierbar ist müsstet ihr selbst evaluieren. Das Bild unten ist nur zur Verdeutlichung und vermutlich eher nicht ganz das was ihr nutzen würdet. Sowas gibts sicher auch in größer und mit anständigem Gehäuse.

    Grundsätzlich ist das aber alles eigentlich unnötiger Schnickschnack. Wenn es wichtig ist, dass "Reservierungen" in Zeitfenster x bearbeitet werden, dann muss man den Mitarbeitern eben Zeitfenster x als festes Prüfintervall vorschreiben. Wer danach immernoch nur einmal am Tag auf den Rechner schaut bekommt eben einen netten Hinweis auf die aufgestellten Regeln.

    784-07.jpg6010-2.jpg

  • Da das hier mittlerweile andere Züge auf nimmt als das eigentliche Anliegen/Problem zu behandeln (eine Hardwareseitige Lösung kommt nicht in Frage, ebenso wenig wie der "DIY-Sperrbildschirm"), schließe ich das Thema als "Erledigt" = nicht möglich ab.

  • "Nicht möglich" - Das gibt es bei uns nicht! :D

    Windows kennt mehrere Desktops, wobei ein Desktop intern eine Art "Ansicht" darstellt, also nicht die Schreibtischanalogie mit Icons meint. Diese Desktops sind auch mit verschiedenen Zugriffsrechten versehen.

    Standardmäßig gibt es drei Stück davon, nämlich einmal den normalen User-Desktop, auf dem alle normalen Programme ausgeführt werden. Dann gibt es noch den ScreenSaver-Desktop, der mit seiner Existenz verhindern soll, dass über den Bildschirmschoner auf die laufenden Programme zugegriffen wird. Und zu guter letzt bleibt noch der Winlogon-Desktop, unser Sperrbildschirm (noch dazu läuft über diesen Desktop jeder UAC-Dialog). Auch diese Trennung dient eigentlich dazu, die Programme, die im User-Desktop-Kontext laufen, vor Zugriff zu schützen.

    Prinzipiell kann ich bei dem Starten eines Prozesses (Win32 CreateProcess) über die STARTUPINFO-Struktur einen Desktop angeben, auf dem der Prozess gestartet wird. Allerdings darf ein normaler Benutzer nicht auf die beiden gesicherten Desktops ScreenSaver und Winlogon zugreifen. Interessanterweise darf dies nicht mal der Administrator-Account, egal ob lokal oder aus der Domäne. In einem Absatz im MSDN wird nur nebenbei erwähnt, dass nur ganz wenige Benutzer auf Winlogon Zugriff haben, der einzige namentlich genannte ist der "LocalSystem account". Dabei handelt es sich um den lokalen Standard-Benutzer "SYSTEM". Ich habe es nicht getestet, aber ich nehme an, solche Benutzer wie TrustedInstaller haben auch Zugriff.

    Zitat von MSDN

    The Winlogon desktop's security descriptor allows access to a very restricted set of accounts, including the LocalSystem account. Applications generally do not carry any of these accounts' SIDs in their tokens and therefore cannot access the Winlogon desktop or switch to a different desktop while the Winlogon desktop is active.

    Die erste Aufgabe besteht also darin, meinen Prozess als SYSTEM auszuführen. wraithdu aus dem EN-Forum hat dafür eine sehr schöne und elegante Lösung gefunden, die ohne Zusatzprogramme wie PsExec auskommt. Dabei registriert sich das Au3-Programm selber als Dienst, welcher als SYSTEM ausgeführt wird. Etwas tricky, aber funktioniert wunderbar. Wohlgemerkt nur bei einem kompilierten AutoIt-Skript. Sobald mein Programm also unter dem SYSTEM-Account läuft, kann ich einen Prozess starten, der als Desktop Winlogon nutzt. Was dieses Programm dann macht, ist komplett dem Programmierer überlassen.

    Ich habe mal exemplarisch eine kleine Uhr programmiert, die auf dem Sperrbildschirm angezeigt wird. Im Anhang sind alle Binärdateien und Skriptdateien enthalten. LogonMsgStarter ist letztendlich wraithdus Skript, welches am Ende einfach nur LogonMsg im Systemkontext auf dem Winlogon-Desktop startet. LogonMsg selber ist letztendlich nichts anderes als eine stinknormale AutoIt-Anwendung, da ist nix dabei. Getestet habe ich das ganze unter Windows 10, funktioniert einwandfrei. Lediglich der "Sperrbildschirm-Schoner", also das Bild, was die Anmeldemaske verdeckt, liegt über meiner GUI. Und die GUI wird auch im Hintergrund von UAC-Dialogen angezeigt. :D

  • Witzig finde ich vorweg schon mal das deine Uhr schon 9mal heruntergeladen wurde, bevor ich deinen Post gesehen habe XD

    Danke für den Hinweis, ich gebe das mal an denjenigen bei uns weiter, der für die Meldungen zuständig ist :D

  • Es steht aktuell wenn ja noch zur Prüfung aus und aktuell sieht es (leider) nach einem "Lösungsweg" aus, den ich persönlich suboptimal finde.

    Wenn es deinen Weg treffen sollte, werde ich dies sicherlich anbringen, kann aber natürlich nichts versprechen.

    Edit: Wobei, wenn man mal genau liest, gar keine Einsparungen statt finden würden (sollte man sich für deinen aufgezeigten Weg entscheiden), da für uns eine Lösung per Hardware nicht in Frage kam. Nichts desto trotz war dein "Sample" das/der bisher beste Beispiel/ Lösungsansatz (meiner Meinung).

    Einmal editiert, zuletzt von Moombas (4. September 2018 um 12:30)