我正在使用win 2003服务器。c#windows服务中的IE截图问题
我在c#.net中创建了windows服务,它每隔5分钟打开IE并带有预定义的URL,获取它的屏幕截图并将其保存到数据库。这似乎是一个简单的应用。但我的问题是,当机器锁定(窗口键+ l)或机器注销时,IE进程启动,但无法进行屏幕截图,只需要“黑屏”。
是否有任何选项在登录屏幕上运行IE?或者有什么解决这个问题的方法吗?
我正在使用win 2003服务器。c#windows服务中的IE截图问题
我在c#.net中创建了windows服务,它每隔5分钟打开IE并带有预定义的URL,获取它的屏幕截图并将其保存到数据库。这似乎是一个简单的应用。但我的问题是,当机器锁定(窗口键+ l)或机器注销时,IE进程启动,但无法进行屏幕截图,只需要“黑屏”。
是否有任何选项在登录屏幕上运行IE?或者有什么解决这个问题的方法吗?
如在Generate WebPage Thumbmail Screenshot Image中发布的,您可以尝试在您的服务中使用WebBrowser控件并从中生成屏幕截图。
该服务需要与“与桌面交互”复选框打勾运行。当拍摄屏幕截图并且不与其他窗口重叠时,窗口在Z顺序中必须是最高的。这种方法很容易出错......就像我发现的那样。
使用代码与桌面进行交互:
在启动服务之前,
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
感谢CodeCanvas。 但是,我需要整个IE屏幕截图,在您的解决方案中提到的方式是捕捉网页截图,我需要整个IE屏幕截图。 关于这个的任何解决方案? – Ankit 2010-12-08 08:32:31