我想在我的应用程序中打开/关闭系统网络图标,就像我们可以通过控制面板做的那样。我知道“HideSCANetwork”注册表项,但要使用此解决方案,我需要在更改设置后重新启动资源管理器。有没有其他解决方案可以像系统一样无缝地完成这项工作?
答案 0 :(得分:1)
没有正式的API来做thois。这样做的原因是微软希望让用户能够保持通知区域不会变得太满。问题是太多的应用程序启动了用户不关心的通知图标。
由于许多用户不知道如何摆脱这些图标,微软决定默认隐藏它们。如果应用程序可以访问这些隐藏/显示设置,那么应用程序将默认显示通知,我们将回到我们开始的位置。因此,没有提供以编程方式修改这些设置的机制。
你想要做一些听起来同样恶意的事情,即隐藏一个重要的系统图标。如果您决定这样做,那么您可以反向设计存储设置的方式(可能在注册表中)并以此方式更改设置。但是,如果你这样做,你将违背系统设计。
答案 1 :(得分:0)
现在我发现了一个不完美的解决方案。基本想法来自这里: http://www.codeproject.com/Articles/10807/Shell-Tray-Info-Arrange-your-system-tray-icons
一些提示:
在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;
不完美的部分是托盘图标将被隐藏,但通知区域不会调整大小。所以通知区域有一个空白区域。