2013-02-12 71 views
1

我得到使用該代碼的窗口句柄:找出一個窗口有一個子窗口

var h: THandle; 
... 
h := FindWindow('MozillaWindowClass', NIL); 

h是有效的(> 0)。

如何查看此窗口是否有任何子窗口?

我無法使用FindWindowEx(),因爲它需要類名。

我想在這裏完成的是找出MozillaWindowClass窗口是屬於Thunderbird還是Firefox。它看起來像Thunderbird有一個MozillaWindowClass沒有孩子,但Firefox不是,所以這將是一個快速找出方法。 (我無法使用CreateToolhelp32Snapshot()來了解進程名稱,因爲我的代碼也需要在Windows 2000上運行)。

+4

不要相信最低版本的MSDN的最低要求,他們傾向於撒謊(放棄不支持的操作系統,但只有有時/爲某些)。 [鏈接](http://support.microsoft.com/kb/830031)。從D2007的winapi文檔:客戶端:需要Windows Vista,Windows XP,Windows 2000 Professional,Windows Me,Windows 98或Windows 95.服務器:需要Windows Server「Longhorn」,Windows Server 2003或Windows 2000 Server。 – 2013-02-12 19:24:31

+2

MSDN文檔會發生什麼情況,當它們得到更新時,將從正在審閱的API主題中刪除對MS不再支持的操作系統版本的任何引用。你需要的是2002年的MSDN DVD,如果你需要支持win2k,你可以使用它。 – 2013-02-12 19:26:29

+0

相關提示謝謝! – Casady 2013-02-12 19:28:47

回答

6

確定窗口是否有孩子的最簡單方法是呼叫GetWindow通過GW_CHILD

function HasChildren(Window: HWND): Boolean; 
begin 
    Result := GetWindow(Window, GW_CHILD)<>0; 
end; 
+0

+1。應該有這個想法。 – 2013-02-12 19:20:27

+0

謝謝。奇蹟般有效。 – Casady 2013-02-12 19:24:13

相關問題