(所有的意思是重新標記與相關技術:我不知道他們是哪些:)Windows:如何獲取所有可見窗口的列表?
我可能會用更詳細的問題,有關具體細節稍後但現在我試圖掌握「全局圖」:我正在尋找一種方法來枚舉Windows上的「真正可見的窗口」。通過「真正的可視窗口」,我的意思是說:用戶稱之爲「窗口」。我需要一種方法來按Z順序獲得所有這些可見窗口的列表。
請注意,我做真的需要做到這一點。我已經在OS X上完成了它(這真的很令人頭疼,特別是如果你想支持OS X 10.4,因爲OS X沒有方便的Windows API),現在我需要在Windows下完成它。
下面是一個例子,假設有在三個屏幕上可見的窗口,像這樣:
+------------------------------------------+
| |
| +=============+ |
| | | |
| | A +--------------------------+
| | | |
| C | | B |
| | +--------------------------+
| | | |
+-----------| |----------------+
| |
+-------------+
然後,我需要找回像這樣的列表:
windows B is at (210,40)
windows A is at (120,20)
windows C is at (0,0)
這時如果用戶(或OS)將窗口A帶到前面,它變成:
+------------------------------------------+
| |
| +=============+ |
| | | |
| | A |---------------------+
| | | |
| C | | B |
| | |---------------------+
| | | |
+-----------| |----------------+
| |
+-------------+
而我得到(理想)的回調給我這個:
windows A is at (120,20)
windows B is at (210,40)
windows C is at (0,0)
下OS X這樣做需要使用令人驚訝的怪異的黑客(如強制要求用戶打開「啓用輔助設備的訪問」!),但我已經在OS X下完成了它,它可以工作(在OS X下,每次發生一些窗口更改時,我都無法獲得回調,因此我正在輪詢,但是我已經完成了它)。
現在,我想這樣做,在Windows下(我真的這麼做了,這是毫無疑問)和我有幾個問題:
才能做到這一點?
是否有良好的記錄Windows API(並按照其規範工作)允許這樣做?
每次窗口變化時,是否容易註冊回調? (如果它被調整大小,移動,回到前面或者如果彈出一個新窗口等)
這個問題會是什麼?
我知道這個問題是不特定的,這就是爲什麼我試圖儘可能清楚地描述了我的問題(包括漂亮的ASCII藝術的,你可以給予好評此):現在我在看「大圖」。我想知道在Windows下做什麼這樣的事情。
獎金的問題:假設你需要寫一個小的.exe寫窗口名稱/位置/大小到一個臨時文件每次有上畫面窗口的變化,多長時間會在這樣一個方案是你的左右選擇的語言和你需要寫多久?
(再一次,我試圖讓「大畫面」明白什麼是在這裏工作)
沒有人?已經+1 +1和1最喜歡... :) – NoozNooz42 2010-07-06 23:29:18
嗯,我想你會開始與FindWindowEx枚舉Z順序的所有窗口,然後使用GetWindowLong獲取窗口樣式。顯然,你只會考慮帶有WS_VISIBLE的窗口,也許可以使用WS_CAPTION或其他。 – Luke 2010-07-07 00:57:13
.net框架是一個選項嗎?我有一個簡單的解決方案,需要十秒。 – Cyclone 2010-07-08 19:14:49