2013-03-18 146 views
1

偶爾應用程序錯誤會使用Z-Index生成隱藏的UI控件,這意味着它位於其他UI元素之上。該隱藏窗格顯示在屏幕的左上角,並阻止用戶從任何最大化的窗口加載「文件」菜單。如果應用程序關閉,UI元素將消失。如果從UISpy和進程內存轉儲中獲得RuntimeId,如何找到隱藏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 "42 21628486"查找引用UI元素的託管對象?或者,也許我可以搜索具有特定寬度的對象?

我希望通過找到管理對象,它會給出一些關於隱藏窗口原因的線索。

回答

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)) 
相關問題