我想獲得一些控件的窗口句柄來做一些東西(需要一個句柄)。這些控件位於不同的應用程序中。一些控件怎麼沒有窗口句柄?
奇怪的是,我發現很多控件沒有窗口句柄,就像Windows資源管理器中工具欄中的按鈕(?)一樣。只要嘗試獲取文件夾/搜索/(等)按鈕的句柄。它只是給我0.
所以..第一個問題:爲什麼有些控件沒有窗口句柄?他們心中不是所有的控制窗口嗎? (只是談論標準控件,就像我期望它們在Windows資源管理器中一樣,在窗格上沒有任何自定義繪圖等)。
這使我想到第二個問題:如何使用它們(如使用EnableWindow)無法得到他們的處理?
非常感謝您的任何意見!
EDIT(附加信息):
Windows資源管理器只是一個例子。我經常遇到這個問題 - 並且在另一個應用程序中(我真正感興趣的是專有應用程序)。我有「物理」控件(因爲我可以獲得這些控件的AutomationElement),但它們沒有窗口句柄。另外,我試圖發送一個消息(SendMessage)來獲取按鈕狀態,試圖找出它是否被推送(它是一個標準按鈕,似乎只通過該消息來展現該行爲 - 至少我已經看到了,而且按鈕的按下狀態可以持續比按鈕更長的時間,儘管Windows資源管理器按鈕顯示類似的行爲,就像按鈕式複選框一樣,儘管它們是(推)按鈕)。 SendMessage需要一個窗口句柄。
工具欄是否以某種方式改變其子元素的行爲?拿走他們的窗戶把手或類似的東西? (使用父處理/控制ID進行標識??)但是,那麼如何使用那些需要窗口句柄的控件的功能呢?
Thx爲您的答案! – 2011-06-15 15:23:47
我試圖通用,然後給出一個具體的例子,它實際上與我想要做的事情無關 - 我的錯,對不起。在一個完全不同的應用程序中,我實際上有完全不同的按鈕,它們也沒有窗口句柄。或者是他們所屬工具欄的特定功能? 此外,我想要使用的功能是類似 int res = SendMessage(realHwnd,BM_GETSTATE,0,0); 找出按鈕是否被按下。 – 2011-06-15 15:39:12
@安德里亞斯:是的,也是我的錯。我花了很長時間閱讀Raymond Chen的博客並回答了這裏的問題,這兩個問題可能讓我對嘗試對Windows進行反向工程的人感到痛心。至於其他應用的功能,很難說。有很多可能的情況。如果你有一個Visual Studio的副本,你應該有一個叫做Spy ++的小工具。用它來確定哪些控件實際上容納了這些按鈕。如果它確實是一個工具欄('ToolbarWindow32'或類似的東西),那麼你可以使用其中一個工具欄操作函數。 – 2011-06-15 15:40:47