none
第三方应用程序窗体中的toolbar和datagridview控件无法查看UI结构

    问题

  • 某个第三方的软件,用。net开发的,装在win7旗舰版上,外层的输入框可以用UISpy工具查看窗体结构,但嵌套在里面的复杂控件都无法看到,包括toolbar,datagridview等都没有下一级了。

    而这个软件在其它机器上,包括xp、win7的操作系统都可以看到datagridview结构。这个是操作系统的bug?还是AutomationElement技术的bug?

    除了重做系统,有没有其它解决办法?

    2017年4月10日 6:30

答案

  • 这种情况主要还是流氓软件损坏注册表或系统文件导致。先执行下sfc /scannow,校验不通过有时候也好使;如果还不行可以尝试使用如下命令重新注册system32目录下的所有dll库试试。
    重新注册DLL命令:

    cmd /c for %i in (%windir%\system32\*.dll) do regsvr32.exe /s %i

    2018年9月19日 4:07

全部回复

  • Hi 朋友的朋友,

    因为这个问题中涉及到三方产品,第三方产品在开发的时候,肯定是有针对特有的系统进行开发。

    如果三方产品不支持win7旗舰版,这个应该是三方产品的问题。

    这个代码就没有抛出什么错误吗?

    对于这个bug,我在connect论坛上面,也没有找到相关的bug信息。你可以去提一下这个问题,在connect上面

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年4月11日 6:00
  • Hi Hart Cheng,

    软件倒是没有抛出啥错误。

    还有,这个第三方软件不是不支持Win7旗舰版,而是只有在少部分机器上,无法查看dagagrid的UI结构,我在想是不是因为某些系统库文件损坏之类的原因引起的。能否有个方向,去修复下。

    2017年4月13日 3:14
  • Hi,

    应该不是系统文件导致的,如果系统文件丢失或者损坏,都会提示什么什么库找不到这样的信息。

    有没有异常出现呢,根据这个信息也是一个方法。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年4月14日 9:12
  • 没太注意,第三方的软件没抛任何异常。下次遇到这种机器看看系统日志再说吧~

    现在只能确定的是,用findfirst方法找不到datagridview中的cell元素(而且是连续获取三次,其中有一次用委托方式调用的),用UISpy也看不到。

    2017年4月18日 0:33
  • 今天在另外一台机器上,发现这个软件的状态栏,用UISpy获取不到,提示如下异常:
    Exception occurred while calling AutomationElement.FromPoint in HoverListener.OnHovering()
    Time Stamp : 4/20/2017 4:10:06 PM
    Name : ElementNotAvailableException
    Message : The target element corresponds to UI that is no longer available (for example, the parent window has closed).
    Stack Trace :    在 MS.Internal.Automation.UiaCoreApi.CheckError(Int32 hr)
       在 MS.Internal.Automation.UiaCoreApi.UiaNodeFromPoint(Double x, Double y, UiaCacheRequest request)
       在 System.Windows.Automation.AutomationElement.DrillForPointOrFocus(Boolean atPoint, Point pt, UiaCacheRequest cacheRequest)
       在 System.Windows.Automation.AutomationElement.FromPoint(Point pt)
       在 UISpy.Trees.HoverListener.OnHovering(Object sender, EventArgs e)

    而用Inspect工具,却可以看到这个状态栏,但没有显示AutomationId、FrameworkId等信息。我试着在代码里用AutomationElement.FindFirst(AutomationID),和TreeWalker.ControlView.GetFirstChild(ParentAutomationElement)均获取不到,状态栏内部信息!
    这到底是怎么了呢?

    2017年4月20日 10:37
  • Hi,

    因为你的问题设计到第三方产品,这已经超出MSDN论坛支持的论坛,我会把这个帖子移到一般讨论区。

    Best Regards,

    Hart


    Please remember to click "Mark as Answer" the responses that resolved your issue, and to click "Unmark as Answer" if not. This can be beneficial to other community members reading this thread. If you have any compliments or complaints to MSDN Support, feel free to contact MSDNFSF@microsoft.com.

    2017年5月8日 7:10
  • 这种情况主要还是流氓软件损坏注册表或系统文件导致。先执行下sfc /scannow,校验不通过有时候也好使;如果还不行可以尝试使用如下命令重新注册system32目录下的所有dll库试试。
    重新注册DLL命令:

    cmd /c for %i in (%windir%\system32\*.dll) do regsvr32.exe /s %i

    2018年9月19日 4:07