如何以编程方式打开/关闭Windows系统网络图标

时间:2014-09-24 03:09:19

标签: windows winapi win32com

我想在我的应用程序中打开/关闭系统网络图标,就像我们可以通过控制面板做的那样。我知道“HideSCANetwork”注册表项,但要使用此解决方案,我需要在更改设置后重新启动资源管理器。有没有其他解决方案可以像系统一样无缝地完成这项工作?

Example

2 个答案:

答案 0 :(得分:1)

没有正式的API来做thois。这样做的原因是微软希望让用户能够保持通知区域不会变得太满。问题是太多的应用程序启动了用户不关心的通知图标。

由于许多用户不知道如何摆脱这些图标,微软决定默认隐藏它们。如果应用程序可以访问这些隐藏/显示设置,那么应用程序将默认显示通知,我们将回到我们开始的位置。因此,没有提供以编程方式修改这些设置的机制。

你想要做一些听起来同样恶意的事情,即隐藏一个重要的系统图标。如果您决定这样做,那么您可以反向设计存储设置的方式(可能在注册表中)并以此方式更改设置。但是,如果你这样做,你将违背系统设计。

答案 1 :(得分:0)

现在我发现了一个不完美的解决方案。基本想法来自这里: http://www.codeproject.com/Articles/10807/Shell-Tray-Info-Arrange-your-system-tray-icons

一些提示:

  • 此解决方案支持Win 7,您可以删除XP检查代码。
  • 在wow64上,您需要更改struct 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消息发送到通知区域窗口。

不完美的部分是托盘图标将被隐藏,但通知区域不会调整大小。所以通知区域有一个空白区域。