2010-03-15 4 views
0

Nous avons un processus nocturne qui met à jour les applications sur le PC d'un utilisateur, ce qui nécessite de redescendre l'application (sans chercher à modifier ce processus).Informations sur l'écran lorsque le système Windows est verrouillé (.NET)

Le problème est que nous sommes en train de construire un Windows AppBar au lancement qui nécessite un écran valide, et lorsque le système est verrouillé, il n'y en a aucun dans la classe Screen. Donc, aucun des effets visuels ne sont activés et il se révèle vraiment laid. La seule façon dont nous avons actuellement autour de ceci est de détecter un écran verrouillé et de juste tourner et attendre jusqu'à ce que l'utilisateur déverrouille le bureau, puis continuer le lancement. Le laisser tomber n'est pas une option, car c'est un élément clé du flux de travail de nos utilisateurs, et ils s'attendent à ce qu'il soit opérationnel s'ils l'ont laissé la nuit précédente.

Des idées? Je ne peux pas sembler trouver n'importe où les informations d'affichage, mais il doit être stocké quelque part au large, car l'utilisateur est toujours connecté

Le contenu du tableau: Screen.AllScreens.

** Une fois verrouillé :

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} 

** Lorsque Unlocked:

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} 

Répondre

1

Il n'y a pas de solution propre pour cela, Windows ne fournit pas un moyen de détecter que le poste de travail est verrouillé et que le bureau « mauvais » est actif. Vous pouvez uniquement détecter le commutateur de session, exemple de code is here. Pour que cela fonctionne, vous êtes pratiquement obligé d'inclure ce code dans l'application et de lui laisser un fil d'Ariane qu'il pourrait lire lorsqu'il redémarrera. Assurez-vous de le réinitialiser après l'avoir utilisé une fois afin que l'application ne puisse pas rester bloquée de façon permanente.

0

Ce problème de verrouillage de l'écran dépend de la version que vous utilisez, soit XP qui utilise GINA qui verrouille l'un écran d Vista qui utilise ContentProvider, ces deux mécanismes sont responsables de cette situation.

La seule façon de voir si l'écran est verrouillé, est un écran de veille entre en jeu, (cela peut être facilement interrogé en exécutant un PInvoke pour interroger SystemsParameterInfo, pour savoir si l'économiseur d'écran est actif ou non - SPI_GETSCREENSAVERRUNNING et SPI_GETSCREENSAVESECURE pour déterminer si cela déclenchera GINA ou Content Provider) en appuyant sur WinKey + L pour lancer l'économiseur d'écran, après la période spécifiée, si aucune activité, alors GINA ou ContentProvider intervient et remplace l'économiseur d'écran par un verrouiller l'écran ... J'ai inclus deux liens pertinents qui ont été affichés ici sur les informations de connexion sécurisée sous Windows ...

0

Cela demanderait un peu de travail, mais vous pouvez utiliser EnumDisplayDevices, EnumDisplaySettingsEx, MonitorFromPoint, GetMonitorInfo depuis user32 et récupérer une capture d'écran du périphérique.

Si le PC est verrouillé ou s'il existe un économiseur d'écran actif, la capture d'écran est toujours de couleur beige. Vous pouvez vérifier cette condition pour savoir que le système est verrouillé. Cela fonctionne également sur les systèmes RDP (client léger sous XP VDI par exemple).

Au moins cela fonctionne dans mon environnement. Des exemples de code peuvent être trouvés par Google.

Questions connexes