2010-12-08 44 views
1

我正在使用win 2003服务器。c#windows服务中的IE截图问题

我在c#.net中创建了windows服务,它每隔5分钟打开IE并带有预定义的URL,获取它的屏幕截图并将其保存到数据库。这似乎是一个简单的应用。但我的问题是,当机器锁定(窗口键+ l)或机器注销时,IE进程启动,但无法进行屏幕截图,只需要“黑屏”。

是否有任何选项在登录屏幕上运行IE?或者有什么解决这个问题的方法吗?

回答

0

如在Generate WebPage Thumbmail Screenshot Image中发布的,您可以尝试在您的服务中使用WebBrowser控件并从中生成屏幕截图。

+0

感谢CodeCanvas。 但是,我需要整个IE屏幕截图,在您的解决方案中提到的方式是捕捉网页截图,我需要整个IE屏幕截图。 关于这个的任何解决方案? – Ankit 2010-12-08 08:32:31

0

该服务需要与“与桌面交互”复选框打勾运行。当拍摄屏幕截图并且不与其他窗口重叠时,窗口在Z顺序中必须是最高的。这种方法很容易出错......就像我发现的那样。

0

使用代码与桌面进行交互:

在启动服务之前,

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); 

尝试运行iexplore的 “Internet Explorer” 从登录页面的系统帐号。只需从您的Windows服务执行Process.Start("Iexplore.exe"),它应该可以工作,但我不确定您是否可以将iexplore作为系统级帐户执行。

否则,您可以尝试通过编写基本密钥采集卡或密钥记录器来阻止锁定屏幕,以阻止锁定,您可以通过启用与桌面的交互来完成此操作。我发布了代码以简化操作,或者通过转到服务并单击您的服务来手动完成。在那里你应该看到一个复选框,其文字为interact with desktop

// M