【问题标题】:Using C# to take a screenshot of the Opera Mobile emulator使用C#截取Opera Mobile模拟器截图
【发布时间】:2012-07-16 14:32:17
【问题描述】:

我有一些问题困扰了我几天..

我需要执行以下操作.. 启动一个进程(带有一些参数),找到该进程的窗口,对该窗口拍照,然后终止该进程 我需要重复这个操作 X 次..

我可以启动进程,使用user32:找到它的主句柄,获取窗口大小,所以我知道图像的大小,将窗口位置设置为0,0,并将其设为topMost,然后copyFromScreen方法为捕获该图像.. 从 0,0 到窗口大小..

所以看起来一切正常,但有一个问题我无法解决..

当进程启动时,我注意到要使用 setWindowPos 本机函数,应该需要一些时间,所以我使用 Thread.sleep(x seconds),但是 每个系统的时间都不一样..这就是问题..我必须知道每个系统要延迟多长时间..我不能让不必要的大延迟,因为这个过程重复了数百次..每毫秒很重要,

如果你有一些解决方案,我会很高兴听到..

这个过程是opera mobile emulator.. 其他解决方案是使用 sendMessage,并更改 url,而不是一遍又一遍地启动该过程.. 和 我会等一次,但这也不起作用.. 使用 Spy++ 我尝试查找有关该过程的详细信息,例如 className .. 它说无效窗口.. 所以我可能也不能使用 sendMessage..

【问题讨论】:

    标签: c# emulation opera


    【解决方案1】:

    浏览器不是为这种用途而设计的。如果您想可靠地知道某个浏览器何时准备好渲染新页面并想要获取结果,请尝试实际集成到浏览器渲染引擎/核心中的东西。

    对于完整的框架,请参阅http://phantomjs.org/ 对于自己的解决方案 - 尝试将浏览器小部件直接嵌入到您的应用程序中,而不是与其他进程交互。我确信.net 有正确的控制。这样您就可以直接挂钩相关事件,而不是猜测正确的延迟。

    【讨论】:

      猜你喜欢
      • 2013-08-28
      • 2011-01-05
      • 1970-01-01
      • 2011-10-28
      • 2013-11-01
      • 2019-06-26
      • 1970-01-01
      • 2012-04-04
      • 2023-02-21
      相关资源
      最近更新 更多