2013-04-17 39 views
0

以前,我詢問this question有關將用戶返回到他們正在使用的上一個窗口,但我找到了解決方案,但它創造了另一個問題。確定前一個窗口的函數有時會起作用(如果某些事件發生,我不能隨意重新創建,但會隨機發生)。在某個時候,它回到2個窗口,有時候回到1個窗口。它這樣做是因爲任務欄先行,然後是窗口。查找任務欄的IntPtr

所以,爲了解決這個問題,我已經確定我應該繼續閱讀前面的窗口,直到我到達一個不是任務欄的窗口,但是,我不知道如何確定任務欄的IntPtr 。

我曾嘗試:

IntPtr taskBarWnd = FindWindow("Shell_TrayWnd", null); 

但它似乎並沒有工作。如果我打電話MessageBox.Show(taskBarWnd.ToInt64().ToString()),我得到131258,但是當我做:

IntPtr thisWnd = GetForegroundWindow(); 
IntPtr lastWnd = GetWindow(thisWnd, 2); 

它引用的任務欄,但當我致電上述相同的MessageBox函數,它返回131260(65774,如果該圖標是隱藏的圖標中區)。

有誰知道如果還有其他事情我可以嘗試確定我計算出的lastWnd是否是任務欄?我寧願不要檢查IntPtr是否彼此靠近而不是平等。

+0

我不確定,但也許你可以嘗試檢查窗口是否屬於「explorer.exe」進程,類似的,因爲如果我沒有錯誤,這個過程管理任務欄(這是一個而自從我沒有挖掘到那種東西) – ppetrov

+0

啊,聽起來像是一個很好的想法。我怎麼會發現,雖然(快速谷歌搜索產量很少,但我認爲這歸結爲不知道正確的話) – topherg

+0

啊,從來沒有,得到它:) – topherg

回答

0

我現在無法檢查,因爲這是我的iPad,但我很確定任務欄窗口都使用自定義窗口類,因此您應該能夠調用GetClassName並從結果中找出您的句柄所指的內容。