2014-03-30 42 views
0

我有一個信息亭式應用程序,用戶/操作員可以使用特殊鍵選擇應用程序。不同窗口最小化不同殼體的行爲

我有一個管理應用程序監視密鑰(通過另一個API),並嘗試根據需要最小化和最大化其他應用程序窗口。

對於任何給定的應用,僞代碼的樣子:

foreach(var process in NotCurrentProcess()) 
    { 
    ShowWindowAsync(process.MainWindowHandle, SW_FORCEMINIMIZE); 
    } 
    ShowWindowAsync(myProcess.MainWindowHandle, SW_SHOWMAXIMIZED); 

這工作正常進行測試。

對於部署我的應用程序變爲HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon

殼現在,當我最小化的應用程序,沒有任務欄爲它去,它浮在上面的窗口上方。

Floating minimized windows

任何人都可以幫助根源/定爲這?

+0

您的shell需要響應HSHELL_GETMINRECT。 –

+0

@RaymondChen你能告訴我這個的意義嗎? –

+0

該通知控制顯示最小化窗口的位置。 –

回答

1

我假設你只是想隱藏窗口,因爲沒有任務欄將它們停靠在右邊?

不是最小化應用程序窗口,而是將其置於屏幕外像它現在使用SetWindowPos的位置左側的10000像素。或者,你可以隱藏每個窗口的SW_HIDE標誌給你的ShowWindow調用。

for (process in NotCurrentProcess()) 
{ 
    SetWindowPos(process.MainWindowHandle, HWND_BOTTOM, -10000, 0, 0, 0, SWP_NOSIZE|SWP_NOZORDER); 

    // OR call ShowWindow(process.MainWindowHandle, SW_HIDE); 

} 
SetWindowPos(myProcess.MainWindowHandle, HWND_TOP, 0, 0, 0, 0, SWP_NOSIZE); 
ShowWindowAsync(myProcess.MainWindowHandle, SW_SHOWMAXIMIZED); 
+0

非常感謝 - 我曾試過'SetWindowPos',但不知道'HWND_TOP'正確使用的'SWP_NOSIZE'標誌。現在驗證這種方法... –

+0

作品,輝煌,thx。與接受的答案唯一的區別是我使用'ShowWindow'而不是'ShowWindowAsync',因爲我的應用程序的主要目的是管理這些窗口,我傾向於同步調用。 –