2012-04-04 86 views
3

我正在創建桌面小工具,並且遇到問題。該窗口將隱藏的「顯示桌面」命令 - 停止,我知道你在想什麼,不需要「你不應該這樣做」的評論 - 我想停止它。畢竟,桌面小工具的重點在於它堅持桌面。通過「顯示桌面」保持窗口可見/ Win + D

只是澄清 - 我不想要一個TopMost窗口。我不想實際停止「顯示桌面」命令,只是忽略它。我只想讓我的桌面小工具在桌面上保持可見狀態,並像往常一樣破壞正常的功能。

任何想法?我目前的方法是在Google上找到的P/Invoke片段,將表單的父項設置爲Progman或其他。問題是,這似乎強制顯示在任務欄中的窗口,我不想要。

+0

所以當用戶點擊「顯示桌面」時,你的小工具是隱藏的?聽起來似乎對我來說很合理,因爲當我點擊顯示桌面時,內置小工具不會隱藏,因此您不希望發生這種情況。這是一個「真正的」小工具嗎?我以爲他們是HTML,但你提到最頂級的形式... – 2012-04-04 10:52:44

+0

這是一個Winforms應用程序。我最初嘗試製作一個「側邊欄」/桌面小工具,但使用C#我感覺更加舒適,無論我對樣式表和其他東西感到困惑,我也無法讓它看起來像我想要的樣子。我放棄了它,並決定嘗試製作自己的獨立小工具。 – robhol 2012-04-04 11:03:45

+0

我不認爲winforms是你想要實現的方式。最好用html – nawfal 2012-04-04 12:25:16

回答

6

也許有點晚了一個回答你的問題,但仍然在這裏的答案,我似乎找到了:

[System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)] 
    static extern IntPtr SetParent(IntPtr hWndChild, IntPtr hWndNewParent); 

    [System.Runtime.InteropServices.DllImport("user32.dll", SetLastError = true)] 
    static extern IntPtr FindWindowEx(IntPtr hP, IntPtr hC, string sC, string sW); 

    void MakeWin() 
    { 
     IntPtr nWinHandle = FindWindowEx(IntPtr.Zero, IntPtr.Zero, "Progman", null); 
     nWinHandle = FindWindowEx(nWinHandle, IntPtr.Zero, "SHELLDLL_DefView", null); 
     SetParent(Handle, nWinHandle); 
    } 

「MakeWin」應在窗體的構造函數調用,最好之前「的InitializeComponent」。 至少在Win7下適合我。

+0

是否可以避免窗口在任務欄上顯示的OP問題? – Emile 2015-09-15 15:28:10

+1

是:)它不顯示任何任務欄圖標。但直到現在我還有另一個問題:窗口不能出現在其他(普通)窗口的上方。我想,兩者的原因是,因爲它已經成爲「SHELLDLL_DefView」的子窗口。我只是試驗「WS_POPUP」風格。 – 2015-09-18 19:46:29

+0

這似乎不適用於Windows 10,如http://stackoverflow.com/q/35045060/2551829中所述。我真的不明白你的代碼是否足夠努力去嘗試和構建這個概念,使它在10上工作。你知道如何修改它以使它在Windows 10中工作嗎? – DeadEli 2016-03-23 22:00:58