【问题标题】:IE screenshot problem in c# windows servicec# windows服务中的IE截图问题
【发布时间】:2010-12-08 07:40:12
【问题描述】:

我使用的是 win 2003 服务器。

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

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

【问题讨论】:

    标签: c# windows internet-explorer service


    【解决方案1】:

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

    【讨论】:

    • 感谢 CodeCanvas。但是,我需要整个 IE 屏幕截图,您的解决方案中提到的方式是仅捕获网页的屏幕截图,我需要整个 IE 屏幕截图。有什么解决办法吗?
    • @Ankit:抱歉,我不知道有什么方法可以截取在锁定的 Windows 会话中运行的应用程序的屏幕截图。
    【解决方案2】:

    服务需要在选中“与桌面交互”复选框的情况下运行。拍摄屏幕截图时,该窗口需要在 Z-Order 中位于最上方,并且不与其他窗口重叠。这种方法很容易出错......正如我发现的那样。

    【讨论】:

      【解决方案3】:

      使用代码与桌面交互:

      在您启动服务之前放置它。

      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 作为系统级帐户执行。

      否则,您可以尝试通过编写基本的按键抓取器或按键记录器来阻止锁定屏幕来阻止MENU+L 锁定,您可以通过启用与桌面的交互来做到这一点。我发布了代码以使其更容易,或者通过转到服务并单击您的服务手动完成。在那里您应该会看到一个带有文本 interact with desktop 的复选框。

      //M

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-01-20
        • 1970-01-01
        • 2010-11-29
        • 2014-11-25
        相关资源
        最近更新 更多