当工具提示悬停时,Process.MainWindowHandle返回IntPtr.Zero

时间:2016-09-07 21:35:14

标签: c# .net process f# user32

我有一个简单的功能,就像这样:

let possibleParents:Seq<Process> = GetProcessesByExecutableFileName(exeName)
let el = match possibleParents with
            | x when x.Where(fun y -> y.MainWindowHandle > IntPtr.Zero).Count() = 1 -> AutomationElement.FromHandle <| Seq.head possibleParents // Only works if no tooltips or menus are open
            | x when x.Where(fun y -> y.MainWindowHandle > IntPtr.Zero).Count() < 1 -> AutomationElement.FromHandle <| Win32.FindWindowByProcess exeName //ALWAYS works
            | x when x.Count() > 1 -> AutomationElement.RootElement // start search from Desktop
            | _ -> null

因此,当从.NET获取Process对象时,如果有任何菜单\ contextmenus,工具提示或组合框打开,它将返回IntPtr.Zero。只要将鼠标从工具提示移开,它就会返回一个真实的IntPtr值。

这是为什么?我能理解mdi children&amp;导致此问题的其他窗口层次结构,但不是简单地将鼠标悬停在工具提示上。 user32.dll导入了什么来查找Process类以不同方式执行的句柄?

欢迎使用F#,C#或VB.NET中的答案。

0 个答案:

没有答案