2014-09-24 80 views
1

我想在應用程序中打開/關閉系統網絡圖標,就像我們可以通過控制面板執行操作一樣。我知道「HideSCANetwork」註冊表項,但要使用此解決方案,需要在更改設置後重新啓動資源管理器。有沒有其他解決方案可以像系統一樣無縫完成這項任務?如何以編程方式打開/關閉Windows系統網絡圖標

Example

+0

應用程序無權這樣做,它是用戶的專有特權。 – 2014-09-24 03:41:56

+0

在企業環境中,您可以通過GPO禁用,在任何其他環境中保持獨立!如果這只是您自己使用,請在更新註冊表項後嘗試廣播WM_SETTINGCHANGE。 – 2014-09-24 10:39:48

回答

1

有做thois沒有官方的API。原因是微軟希望讓用戶能夠保持通知區域不會變得太滿。問題是太多的應用程序啓動用戶不關心的通知圖標。

由於許多用戶不知道如何擺脫這些圖標,Microsoft決定默認隱藏它們來提供幫助。如果應用程序有權訪問這些隱藏/顯示設置,那麼應用程序會默認顯示通知,我們會回到我們開始的位置。因此沒有提供以編程方式修改這些設置的機制。

你想做一些不同的事情,聽起來同樣有惡意,即隱藏一個重要的系統圖標。如果您決定這樣做,那麼您可以反向設計如何存儲設置(可能在註冊表中)並以此方式更改設置。但是,如果你這樣做,你會反對系統設計。

+0

謝謝大衛。我的應用程序(提供網絡相關功能)顯示與通知區域中的系統網絡圖標類似的圖標。我想在應用程序中創建一個設置項,以便不想看到兩個相似圖標的用戶在應用程序運行期間隱藏系統。 – Shawnone 2014-09-25 02:05:24

0

現在我找到一個不完美的解決方案。其基本思想來自這裏: http://www.codeproject.com/Articles/10807/Shell-Tray-Info-Arrange-your-system-tray-icons

一些提示:

  • 該解決方案支持Win 7,你可以刪除XP校驗碼。
  • 在WOW64上,你需要改變結構TRAYDATA和使用TBUTTON64:

    struct TRAYDATA 
    { 
        DWORD64 hwnd; 
        UINT uID; 
        UINT uCallbackMessage; 
        DWORD Reserved[2];  
        DWORD64 hIcon;    
    }; 
    
    typedef struct _TBBUTTON64 
    { 
        int iBitmap; 
        int idCommand; 
        BYTE fsState; 
        BYTE fsStyle; 
        BYTE bReserved[6]; 
        DWORD64 dwData; 
        DWORD64 iString; 
    } TBBUTTON64, NEAR* PTBBUTTON64, *LPTBBUTTON64; 
    typedef const TBBUTTON64 *LPCTBBUTTON64; 
    
  • 當你找到你想隱藏的圖標(通過使用提示文本加上所有者的過程),發送TB_HIDEBUTTON消息到通知區域窗口。

不完美的部分是托盤圖標將被隱藏,但通知區域不會調整大小。所以通知區域有一個空白區域。

相關問題