【问题标题】:Run windows application inside another window在另一个窗口中运行 Windows 应用程序
【发布时间】:2012-03-27 07:38:00
【问题描述】:

是否可以在另一个窗口内运行 Windows 应用程序(打开顶级窗口)?或者设置一个拥有该窗口的备用“桌面”/假桌面?

我正在使用 UI 自动化来自动化应用程序以进行测试。我想将被测试的应用程序放在一种沙箱中:桌面和应用程序之间的人造父窗口,或伪桌面,第二个桌面等。这个桌面(和被测应用程序)不需要可见。

被测应用程序的不同实例(在普通桌面或沙盒中)不应相互冲突(窗口名称/类明智)——被测应用程序可以安全地拥有多个实例...

我意识到这看起来很老套,所以欢迎使用 win32 hack。 :)

【问题讨论】:

  • 支持,您可以调用 SetParent() 将窗口粘贴到您的一个窗口中。实际上根本没有帮助,您仍然需要窗口句柄来做任何有意义的事情。调用 GetWindowRect() 完成同样的事情。

标签: windows winapi ui-automation


【解决方案1】:

您可以尝试使用CreateDesktop 创建桌面,并在启动目标应用程序时在 STARTUPINFO 中传递其名称。

【讨论】:

  • 请注意,这有一些限制:操作应用程序(而不仅仅是返回信息)的大部分 UIAutomation 功能要求目标 UI 具有输入焦点,但应用程序只能接收输入焦点如果它在当前活动的桌面上。因此,您可以创建一个桌面并在其上放置应用程序,但如果该桌面不是当前(可见)桌面,则某些自动化可能会以意想不到的方式失败。
  • 有关非活动桌面上自动化问题的更多详细信息,请参阅我对相关问题的回答 here
【解决方案2】:

如果您正在自动化测试应用程序,那么我猜您正在尝试为要测试的应用程序创建沙盒。对此有一个非常 good library by Liu Yu 也可以看到这个:Create Sandbox C# 和这个:How to create a lightweight C code sandbox?

【讨论】:

    猜你喜欢
    • 2010-10-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 1970-01-01
    • 2013-02-08
    • 2021-11-23
    • 1970-01-01
    相关资源
    最近更新 更多