【问题标题】:Access Silverlight window within Chrome via System.Windows.Automation通过 System.Windows.Automation 在 Chrome 中访问 Silverlight 窗口
【发布时间】:2011-10-17 13:47:32
【问题描述】:

这可能是徒劳的,但我想知道是否有人有这样做的经验。

我正在尝试使用 System.Windows.Automation(例如,自动化元素)。

我遇到的问题是 Chrome 在子进程中托管 Silverlight 应用程序。如果我试图找到 "Silverlight Control" AutomationElement(通过使用主进程的 hWnd),它会失败。

如果我找到 Silverlight 宿主子进程,它没有窗口句柄,如果我尝试使用子进程的句柄查找控件,它会失败。

我知道它在那里...我可以使用 Inspect 看到它

但我只能通过在 Silverlight 应用中单击并在 Inspect 中向上导航来找到它。我无法使用 AutomationElement.FindFirst 或 Inspect 从选项卡窗口向下导航。

它就像在 IE 或 Firefox 中看不到的窗口和 Silverlight 插件之间存在断开连接,我不知道如何解决它。

其他人能做到吗?

【问题讨论】:

  • running Chrome with the --no-sandbox flag set 有帮助吗?我没有可用的 Inspect.exe,因此无法确认。
  • @Marcel:嗯,不知道。但是,我不确定这是否是一个可接受的解决方案。您必须要求用户不要使用 Chrome 的一项更好的功能。这有点像要求他们以管理员身份运行。
  • 哦,当然,我以为你只是想调试这个答案适合的东西。

标签: silverlight google-chrome ui-automation automationelement


【解决方案1】:

我不确定这对您的实例是否有帮助,但我遇到了几个需要从外部启用与 Silverlight 通信的实例(需要与 Silverlight 应用程序通信的 Office 应用程序插件)。我在托管 Silverlight 应用程序的 html 页面中使用了 javascript 作为该通信的桥梁:

    function sendToNav(message) {
        var nav = document.getElementById("Nav");
        nav.content.NavigationPage.HandleScriptedMessage(message);
    }

    function passMessageToHost(message) {
        if (window.external == null) return;

        window.external.HandleScriptedMessage(message);
    }

如果我可以提供任何其他信息,请告诉我。希望对你有所帮助。

【讨论】:

  • 感谢您的建议,但不幸的是我无法控制应用程序所在的页面。
猜你喜欢
  • 1970-01-01
  • 2010-10-27
  • 2013-03-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 2012-07-24
  • 1970-01-01
相关资源
最近更新 更多