Question

Nous avons un processus de nuit qui met à jour des applications sur le PC d'un utilisateur, et qui nécessite l'application qui porte vers le bas et sauvegarder à nouveau (ne cherche pas à entrer dans le changement de ce processus).

Le problème est que nous construisons un ordinateur Windows AppBar sur le lancement qui nécessite un écran valide, et lorsque le système est verrouillé il n'y a pas un dans la classe d'écran. Ainsi, aucun des effets visuels sont activés et il apparaît merder.

La seule façon que nous avons actuellement autour est de détecter un écran verrouillé et juste tourner et attendre jusqu'à ce que l'utilisateur ouvre le bureau, puis continuer à lancer. Laissant vers le bas est pas une option, car cela est un élément clé du flux de travail de nos utilisateurs, et ils attendent que ce soit en cours d'exécution et si elles ont quitté cette façon la veille.

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

Le contenu du tableau Screen.AllScreens:

** Quand il est 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}
Était-ce utile?

La solution

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 ne pouvez détecter le commutateur de session, exemple de code est ici . Pour faire ce travail, vous êtes à peu près obligé d'inclure ce code dans l'application et l'ont laisser un fil d'Ariane qu'il pouvait lire en arrière quand il commence à remonter. Assurez-vous de le réinitialiser après l'avoir utilisé une fois pour que l'application ne peut se coincer de façon permanente.

Autres conseils

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

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 fournisseur de contenu) lorsque vous appuyez sur WinKey + l pour lancer dans l'écran de veille, après la période de temps, si aucune activité, alors GINA ou ContentProvider entre en jeu et remplace l'écran de veille avec un écran de verrouillage ... J'ai inclus deux liens pertinents qui a été publié ici sur les informations d'enregistrement sécurisé sous Windows ...

Il faudrait un peu de travail, mais vous pouvez utiliser EnumDisplayDevices, EnumDisplaySettingsEx, MonitorFromPoint, GetMonitorInfo tous de user32 et prenez une capture d'écran de l'appareil.

Si le PC est verrouillé, ou s'il y a un économiseur d'écran actif, la capture d'écran est toujours une couleur beige. Vous pouvez vérifier cette condition de connaître le système est verrouillé. Cela fonctionne sur les systèmes étant en RDPed aussi (client léger sur XP VDI par exemple).

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

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top