2009-03-11 5 views
2

J'écris un service C# qui doit récupérer des informations de l'utilisateur actuellement connecté comme la fenêtre active ou le dernier mouvement de la souris. J'ai déjà appris que je peux récupérer ces informations en utilisant le user32.dll mais cela ne fonctionne que dans le contexte utilisateur qui appelle les méthodes. De cette façon, mon service n'a pu récupérer que des informations sur lui-même, mais pas sur l'utilisateur «monde réel». J'ai également entendu que cela devrait être possible en utilisant WTSEnumerateSessions, OpenWindowStation, EnumDesktops, et ainsi de suite, mais je n'ai pas trouvé d'exemple me montrant comment faire cela.Comment faire pour obtenir la fenêtre active d'un utilisateur connecté d'un service

Est-ce que quelqu'un a une idée (ou peut-être quelques exemples de code) comment atteindre mon objectif?

Répondre

4

Cela ressemble beaucoup à un travail pour une application en cours d'exécution dans la session de l'utilisateur. Un service bien comporté ne devrait pas espionner l'utilisateur comme ça. Il peut être des moyens de le faire (Honnêtement, je ne sais pas), mais cela ne semble pas très ... approprié.

Notez qu'avec les versions récentes de Windows, la session de la console (session 0) est limitée à des fins d'administration, et l'utilisateur ne sera pas (normalement) présent. Vous pouvez avoir zéro, une ou plusieurs sessions non-console.

+0

En effet. Je n'aime pas beaucoup cette façon non plus, mais si l'application s'exécute dans la session de l'utilisateur, l'utilisateur serait capable de l'annuler. Cela pourrait être évité dans le cas où il fonctionne en tant que service. – Marcus

+0

Il suffit que le service redémarre l'application. – Samuel

+0

J'ai pensé à créer une application utilisateur et un service supplémentaire, mais comment un service peut-il redémarrer une application dans la session de l'utilisateur sans avoir les informations d'identification de l'utilisateur? – Marcus

Questions connexes