Frage

Wir haben einen nächtlichen Prozess, dass Updates von Anwendungen auf einen PC des Benutzers, und das erfordert die Anwendung zu bringen nach unten und wieder nach oben (nicht in wechselnden, diesen Prozess zu bekommen suchen).

Das Problem ist, dass wir einen Windows AppBar auf Start bauen die einen gültigen Bildschirm erfordert, und wenn das System gesperrt ist, gibt es nicht eine in der Screen-Klasse. Also keine der visuellen Effekte aktiviert sind und es zeigt sich echte hässlich.

Der einzige Weg, wir haben um zur Zeit ist dies ein gesperrten Bildschirm und nur Spin und Wartezeit zu erkennen, bis der Benutzer den Desktop entriegelt, dann startet weiter. Verlassen sie nach unten ist keine Option, da dies ein wesentlicher Bestandteil unserer Benutzer-Workflow ist, und sie erwarten, dass es sein, und läuft, wenn sie es auf diese Weise vor der Nacht verlassen.

Irgendwelche Ideen ?? Ich kann nicht scheinen, um die Anzeigeinformationen überall zu finden, aber es hat aus irgendwo gespeichert werden, da der Benutzer noch angemeldet ist.

Der Inhalt des Screen.AllScreens Array:

** Wenn Gesperrt:

Device Name    : DISPLAY
Primary        : True
Bits Per Pixel : 0
Bounds         : {X=-1280,Y=0,Width=2560,Height=1024}
Working Area   : {X=0,Y=0,Width=1280,Height=1024}

** Wenn freigesetzt:

Device Name    : \\.\DISPLAY1
Primary        : True
Bits Per Pixel : 32
Bounds         : {X=0,Y=0,Width=1280,Height=1024}
Working Area   : {X=0,Y=0,Width=1280,Height=994}

Device Name    : \\.\DISPLAY2
Primary        : False
Bits Per Pixel : 32
Bounds         : {X=-1280,Y=0,Width=1280,Height=1024}
Working Area   : {X=-1280,Y=0,Width=1280,Height=964}
War es hilfreich?

Lösung

Es gibt keine saubere Lösung für dieses Windows bietet keine Möglichkeit zu erkennen, dass die Arbeitsstation gesperrt ist und dass der „falsche“ Desktop aktiv ist. Sie können nur die Session-Schalter erkennen, Beispielcode ist hier . Um diese Arbeit zu machen, sind Sie ziemlich viel gezwungen, diesen Code in der App enthalten und haben eine Brotkrümel lassen, dass es zurücklesen kann, wenn es wieder gestartet wird. Achten Sie darauf, um es zurückzusetzen, nachdem Sie es einmal verwendet, so dass die App nicht dauerhaft stecken bleiben.

Andere Tipps

Dieses Bildschirmsperre Problem ist davon abhängig, was Version Sie verwenden, entweder XP, die GINA verwendet, die den Bildschirm und Vista sperrt die Contentprovider verwendet, sind diese beiden Mechanismen letztlich dafür verantwortlich.

Der einzige Weg, um zu sehen, ob der Bildschirm gesperrt ist, ist ein Bildschirmschoner Tritt in, (dies leicht ein, indem Sie pinvoke zu Abfrage SystemsParameterInfo , um herauszufinden, ob der Bildschirmschoner aktiv ist oder nicht - SPI_GETSCREENSAVERRUNNING und SPI_GETSCREENSAVESECURE , um zu bestimmen, ob das GINA oder Content-Provider ausgelöst wird), wenn WinKey + L Tritt in dem Bildschirmschoner, nach der angegebenen Zeit, wenn keine Aktivität, dann GINA oder Contentprovider Kicks in und ersetzt die Bildschirmschoner mit einer Press Bildschirm sperren ... ich habe zwei relevante Links enthalten, die hier über die sichere Protokollierung Informationen unter Windows geschrieben wurde ...

Es wäre ein wenig Arbeit erfordern, aber könnten Sie EnumDisplayDevices nutzen, EnumDisplaySettingsEx, MonitorFromPoint, GetMonitorInfo alle von user32 und einen Screenshot des Gerätes greifen.

Wenn der PC gesperrt ist, oder wenn es ein aktiver Bildschirmschoner ist, dann ist der Screen-Capture ist immer eine beige Farbe. Sie könnten für diese Bedingung überprüfen, das System zu wissen, gesperrt ist. Dies funktioniert auf Systemen wird RDPed in auch (zB Thin Client XP VDI).

Wenigstens das funktioniert in meiner Umgebung. Codebeispiele können durch googeln gefunden werden.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top