簡體   English   中英

將 window 焦點恢復到以前的所有者

[英]Restoring window focus back to previous owner

我有一個位於系統托盤中的應用程序,雙擊它會打開一個 window,相當標准; 但是,當您關閉 window 時,我希望在我的打開之前聚焦的 window 被重新聚焦。

If I pop my window up by a keyboard shortcut, I'm able to restore the previous focus on close by using the GetForegroundWindow API call before my window shows, then the SetForegroundWindow method after my window closes (with the value of the first call)恢復焦點。 當您通過系統托盤打開 window 時,這不起作用,因為用戶實際上已經使系統托盤成為焦點。

我嘗試使用GetForegroundWindowGetWindowGetTopMostWindow的組合來嘗試導航 z 順序以在系統托盤之后找到第二個 window (假設系統托盤將跳到頂部,所以邏輯上是下一個向下將是原來的前面)。 雖然我沒有取得任何成功,但這些函數的結果毫無用處,因為它們似乎沒有給我任何邏輯結構。

有人對我如何實現這一目標有任何想法嗎?

我曾考慮過某種后台觀察器,它只是坐下來監視前面的 window 並存儲指向它的指針,但這充其量只是不穩定的。

這是在 Windows(我個人在 x64 Server 2008 上)和.Net 3.5 上。

我這樣做是為了取回以前的 window

SendKeys.Send("%{TAB}");

我知道這不是“解決方案”,而是在某種程度上達到目的。

盡管這可能是一個很好的可用性功能,但您可能知道使用 Windows 7,托盤將在桌面上獲得(非常)不那么突出的位置。

實際執行此操作的唯一方法是監視 Windows 消息並在您的應用程序獲得焦點之前跟蹤哪個 window 具有焦點。 除了 AFAIK,您無能為力。

我查看了所有系統托盤圖標,它們的行為與您的程序相同。 搞亂 Windows 焦點管理很麻煩,在嘗試更改標准行為之前,您可能需要三思(或更多)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM