2015-12-03 183 views
0

如果定義的子窗口打開並處於前臺,我想檢查外國應用程序。獲取活動子窗口

如果我使用winapi GetForegroundWindow進行檢查,我會得到主窗口的句柄,而不是實際的活動子窗口。

我可以通過與標題匹配的所有窗口來枚舉winapi EnumWindows,但是這隻會提供信息,即子窗口是打開的,但如果它處於前景中則不會。

如何合併兩個東西?

+0

[定義](https://msdn.microsoft.com/en-us/library/windows/desktop/ms632599.aspx),活動窗口始終是頂層窗口(就像前景一樣窗口)。 *「實際活動的子窗口」*不是存在的。你真的在找什麼?此外,這聽起來像是一個XY問題。你爲什麼需要知道?你是否試圖實施某種脆弱的UI自動化? – IInspectable

+0

我不明白這些信息對解決這個問題有什麼幫助,但是在這裏你可以看到: 有一箇舊的com應用程序,我不允許改變一下。這就是爲什麼我需要在定義的控件中追蹤一些輸入。 – isHuman

+0

該信息對於改善您的問題非常有用。正如所寫,它要求的東西不存在。這些信息也很有用,因爲它可以幫助我們避免使用帶方形車輪的汽車。如果要觀察/自動化UI,請使用[UI自動化](https://msdn.microsoft.com/en-us/library/ms747327.aspx)。使用UI Automation,您不需要您想要的東西。 – IInspectable

回答

0
  1. GetForegroundWindow找到前景窗口。
  2. GetWindowThreadProcessId查找擁有該窗口的主題。
  3. GetGUIThreadInfo找到該線程的GUI信息(活動窗口,焦點窗口,捕獲窗口等)。
+0

它有點不同。我對所需的窗口標題使用了'EnumWindows',併爲所有生成的句柄調用'GetWindowThreadProcessId',檢查'GetForegroundWindow'的'GetWindowThreadProcessId'是否相等。 – isHuman