1

有时,应用程序错误会生成带有 Z-Index 的隐藏 UI 控件,这意味着它位于其他 UI 元素之上。这个隐藏的窗格出现在屏幕的左上角,并阻止用户从任何最大化的窗口加载“文件”菜单。如果应用程序关闭,UI 元素就会消失。

使用 UISpy,我能够捕获有关元素的以下信息:

AutomationElement
  General Accessibility
    AccessKey:     ""
    AcceleratorKey:            ""
    IsKeyboardFocusable:               "True"
    LabeledBy:      "(null)"
    HelpText:        ""

  State
    IsEnabled:       "True"
    HasKeyboardFocus:    "False"

  Identification
    ClassName:    "WindowsForms10.Window.8.app.0.365bd83"
    ControlType:  "ControlType.Pane"
    Culture:            "(null)"
    AutomationId:              ""
    LocalizedControlType:               "pane"
    Name:              ""
    ProcessId:       "10968 (MyApplication)"
    RuntimeId:     "42 21628486"
    IsPassword:    "False"
    IsControlElement:       "True"
    IsContentElement:      "True"

  Visibility
    BoundingRectangle:   "(0, 0, 132, 38)"
    ClickablePoint:              "(null)"
    IsOffscreen:   "False"

ControlPatterns

我还有一个在 WinDbg 中打开的应用程序的内存转储。如何找到使用 RuntimeID 引用 UI 元素的托管对象"42 21628486"?或者也许我可以搜索具有特定宽度的对象?

我希望通过找到托管对象,它会提供一些关于隐藏窗口原因的线索。

4

1 回答 1

0

还没有弄清楚是否可以使用 WinDbg,但能够附加 Visual Studio 的一个实例并且......

使用Inspect.exe能够找到一个 hwnd(可能与 RuntimeId 相同但不确定):

How found:  Focus [o:0xFFFFFFFC,c:0x0]
    hwnd=0x0006219E 32bit class="WindowsForms10.Window.8.app.0.27e1210" style=0x96010000 ex=0x90088

触发了一个断点,并能够在即时窗口中使用以下命令找到控件:

System.Windows.Forms.Control.FromHandle(new IntPtr(401822))
于 2013-03-18T19:28:31.940 回答