如何在RDP C#上检查网页加载

时间:2013-12-17 03:42:14

标签: c# remote-desktop remote-server rdp

我有一个C#代码打开另一台服务器的RDP - iexplore.exe。 现在我必须向下滚动网页并拍摄其屏幕截图,但在每次滚动时,图像都需要一些时间来加载。因此,当我在每个滚动条上拍摄一个屏幕截图时,有时会保存已卸载的图像 在拍摄屏幕截图之前,我尝试了1秒的延迟,但它不是一个完整的证明解决方案。 是否还有其他方式/事件来检查网页/该部分是否已加载?

以下是我的代码:

        IHTMLElement2 scroller = null;
        if (currentSnapshot.IsFullPage)
        {
            scroller = GetScrolledElement(dimensions);
        }

        if (scroller != null)
        {
            originalScrollPosition = scroller.scrollTop;    //here's where we started to begin with
            maxScrollPosition = Math.Max(scroller.clientHeight, scroller.scrollHeight); 

            scroller.scrollTop = 0; //start at the top
        }
        var screen = SnapshotHelper.CaptureArea(dimensions);
        images.Add(screen);
        Thread.Sleep(1000);                    
        Application.DoEvents();

谢谢

2 个答案:

答案 0 :(得分:0)

我想象一下,有一些真实和实际的理由你需要通过RDP完成所有这些,并说它不能直接完成。话虽这么说,您可以使用Virtual Channel将与IE协调的远程端屏幕截图的结果传回RDP客户端。

Client opens RDP --RDP--> Server which runs service listening for virtual channel
  1. 客户端发送跨虚拟通道呈现的请求
  2. 服务器渲染并返回图像
  3. 话虽这么说,现在是提及Awesomium的好时机,它通过C#界面提供与Chrome相同的渲染器。

    您还可以使用内置的WebBrowser控件实现实际捕获,该控件使用IE进行渲染。 This blog有一个很好的演示如何这样做。

答案 1 :(得分:0)

先生,谢谢你的建议。我能够使用以下方法解决问题:

        while (IEApp.Busy)
            {                   
                Thread.Sleep(1000);
                Application.DoEvents();
            }