2010-12-08 17 views
1

J'utilise win 2003 server.Problème de capture d'écran IE dans le service C# windows

J'ai un service Windows créé dans C# .net, il ouvre IE toutes les 5 min avec une URL prédéfinie, obtient une capture d'écran de celui-ci et l'enregistre dans la base de données. Cela semble une application simple. Mais mon problème est que lorsque la machine est verrouillée (touche de la fenêtre + l) ou que la machine est déconnectée, le processus IE démarre, mais ne peut pas prendre de capture d'écran, il ne prend que la "page noire".

Existe-t-il une option pour exécuter IE à l'écran de connexion? ou y a-t-il du travail autour de ce problème?

Répondre

0

Comme indiqué dans Generate WebPage Thumbmail Screenshot Image, vous pouvez essayer d'utiliser un contrôle WebBrowser dans votre service et générer une capture d'écran à partir de cela.

+0

merci CodeCanvas. Mais, j'ai besoin d'une capture d'écran IE entière, la façon dont la mention dans votre solution capture capture d'écran seulement de la page Web, j'ai besoin de l'écran entier IE. Une solution à ce problème? – Ankit

+0

@Ankit: Désolé, je ne connais aucune méthode permettant de prendre une capture d'écran d'une application qui s'exécute dans une session Windows verrouillée. –

0

Le service doit s'exécuter avec la case à cocher "interagir avec le bureau" cochée. La fenêtre doit être la plus haute dans l'ordre Z lorsque la capture d'écran est prise et ne se chevauche pas avec d'autres fenêtres. Cette approche est assez sujette aux erreurs ... comme je l'ai constaté.

0

Pour interagir avec le code à l'aide de bureau:

Mettre cela juste avant de commencer le service.

String sYourServiceName = @"MyService" //Change this to r service name 
ConnectionOptions co = new ConnectionOptions(); 
co.Impersonation = ImpersonationLevel.Impersonate; 
ManagementScope mgmtScope = new System.Management.ManagementScope(@"root\CIMV2", co); 
mgmtScope.Connect(); 
ManagementObject wmiService; 
wmiService = new ManagementObject("Win32_Service.Name='" + sYourServiceName + "'"); 
ManagementBaseObject InParam = wmiService.GetMethodParameters("Change"); 
InParam["DesktopInteract"] = true; 
ManagementBaseObject OutParam = wmiService.InvokeMethod("Change", InParam, null); 

ou

Essayez d'exécuter iexplore "Internet Explorer" en tant que compte système de la page d'ouverture de session. Exécutez simplement Process.Start("Iexplore.exe") à partir de votre service Windows et cela devrait fonctionner, mais je ne suis pas sûr si vous pouvez exécuter iexplore en tant que compte de niveau système.

Sinon, vous pouvez essayer de bloquer l'écran de verrouillage en écrivant une clé de saisie de base ou un enregistreur de frappe pour bloquer le verrouillage MENU+L, vous pouvez le faire en activant l'interaction avec le bureau. J'ai posté le code pour le rendre plus facile ou le faire manuellement en allant aux services et en cliquant sur votre service. Là, vous devriez voir une case à cocher avec le texte interact with desktop.

// M