2010-08-12 56 views
2

可以有一个人告诉我怎么隐藏其他应用程序/流程/显示托盘图标用我的申请,我想隐藏的'连接到internet''icon(即变成蓝色的两台计算机时,数据被发送/收到/两者)从我的应用程序
编辑:我可以用这个片段从http://scalabium.com/faq/dct0147.htm如何隐藏其他应用程序/进程的托盘图标(从我的应用程序)?

ShowWindow(FindWindowEx(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'TrayNotifyWnd', nil), 0, 'TrayClockWClass', nil), SW_HIDE); 

采取我想我可以使用此代码隐藏'internect连接图标“”(顺便说一下隐藏系统时钟是什么这个图标是否被称为?)以及通过替换TrayClockWlass而不是哪个类? 我已经尝试使用这个工具叫windowse,但没有运气
EDIT2找到类的名称:我可以通过leftclicking“托盘窗口”,然后选择属性,并在属性窗口点击隐藏在Windows的图标,“自定义”按钮,然后改变图标从属性“隐藏不活动时”到“总是隐藏”我可以做到这一点在Delphi,甚至更好我可以隐藏/显示(完全)每当我想(用delphi)

+7

你为什么要这么做?为什么不计算控制系统隐藏/显示托盘使用(可能在注册表中),而不是搞乱人们的计算机。干扰这些事情会导致人们的麻烦。网络图标由控制面板控制,因此找到将其关闭的注册表选项。任务完成。 – mj2008 2010-08-12 09:29:17

+0

我不会与其他人混淆我正在写一个个人程序,请参阅edit2通过注册表执行它我将不得不每次重新启动我的电脑?我想隐藏/显示速度为 – 2010-08-12 10:24:39

+0

通过按钮点击我的程序通过双击托盘图标,选择属性,并取消选中“连接时通知区域中的显示图标”框,可以隐藏Internet连接图标。 – 2010-08-12 12:09:24

回答

4

的API不公开访问该图标其他应用程序的图标。唯一的选择是对系统托盘进行子类化,以截获Shell_NotifyIcon()发送给它的窗口消息,以便您可以跟踪哪些HWND正在注册哪些图标标识。

+0

谢谢,看我的编辑 – 2010-08-12 09:05:59

+0

没有办法可编程访问操作系统的内置“隐藏时无效”和“始终隐藏”功能。同样,访问和操作别人图标的** ONLY **方法是直接挂入系统托盘的窗口并拦截Shell_NotifyIcon()的WM_COPYDATA消息(请参见http://www.codeproject.com/KB/applications /ShellTrayInfo.aspx的消息内容),因此您可以访问每个图标的HWND和ID,以便您自己调用Shell_NotifyIcon(),否则只需阻止消息,以便图标不会到达系统托盘。 – 2010-08-13 02:12:56

+0

感谢那是我寻找的答案,类似WM_COPYDATA部分窗口api的消息吗?也是例子是在c + +(我不知道:-()你有一个链接到一个delphi的例子 – 2010-08-13 07:56:50

0

如果你负责你在运行的计算机的时候,那么你恰到好处单击该图标,手动禁用它。据推测,这会在注册表中写入一些设置(使用procmon查找),所以您可以通过Active Directory自动执行它。

如果你不负责,这意味着它不是你的,只是一些随机电脑,你的应用程序自愿决定继续并隐藏它不喜欢的图标,然后不,没有API可以做到这一点,并且甚至试图让你感到沮丧。用户决定何时想隐藏图标,而不是您的超酷程序。

+3

如果有人想编写管理托盘图标的应用程序,例如让用户选择要显示何时/何地,..拧他也? – 2010-08-12 14:13:09

+0

该应用程序已被写入,它被称为资源管理器。它有用于显示/隐藏图标以及何时/何时的界面重新向他们展示。任何不属于资源管理器的增强功能的定义都是不稳定的,因为它必须依赖未公开的功能和技巧,例如Windows搜索才能使资源管理器执行不应该执行的操作。无论如何,这是一个坏主意。尽管如此,用户权限是可能的,因为应用程序可以将自己提升为管理员,然后执行所有这些肮脏的技巧。幸运的是,对于恶意应用程序,这不起作用。 – himself 2010-08-12 14:46:53

+2

首先,虽然后面的操作系统对此非常灵活,但前者并非如此。其次,外壳定制并非闻所未闻。我看到很多用户使用第三方软件来改变这个或那个的外观/行为。第三,explorer是默认的shell,但也有其他的,它们实现了系统托盘的功能......我确信我无法想到每一个有效的用途。重点在于,虽然对于不想帮助创建恶意代码的人来说很不错,但要做出判断并不容易。因此,我反对你的回答。 – 2010-08-12 16:04:18

3

时钟比如你引用的作品,因为,虽然时钟图标是在同一地区的通知托盘,它实际上不是同一个窗口,但本身就是一个单独的窗口。您无法使用相同的方法隐藏单个图标,因为它们都被视为一个整体。

您可以隐藏整个通知托盘,虽然:

ShowWindow(FindWindowEx(FindWindowEx(FindWindow('Shell_TrayWnd', nil), 0, 'TrayNotifyWnd', nil), 0, 'SysPager', nil), SW_HIDE); 
+0

我想知道你为什么要在接受的问题上发布老问题的答案?当然,你可以自由地这么做......只是这里有点没用(至少对我来说)。 – jachguate 2010-11-09 21:50:24

+3

对于未来会发现此问题的人(例如我自己),希望解释为什么您可以隐藏时钟,但不是单个托盘图标。没有人解释说。 – FSD 2010-11-09 21:52:55

+0

hi fsd,我在ages.thanks之后登录了我的堆栈溢出帐户。 – 2011-01-13 11:50:21

相关问题