2010-08-12 3 views
2

может кто-нибудь показать мне, как скрыть/показать иконки в трее других приложений/процессов с помощью моего приложения, я хочу скрыть «подключенный к интернету» (те два компьютера, которые становятся синими, когда данные отправляются/получаются/оба) из моего приложения
редактировать: я могу скрыть системные часы, используя этот фрагмент, взятый из http://scalabium.com/faq/dct0147.htmКак скрыть значки в трее других приложений/процессов (из моего приложения)?

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

я предполагаю, что я могу использовать этот код, чтобы скрыть «» internect значка соединения «» (кстати, что это значок, который называется?), а также замену TrayClockWClass, но каким классом? я пытался найти имя класса, используя этот инструмент называется windowse, но не повезло
edit2: я могу скрыть эти иконки в окнах на leftclicking «окно лотка», затем выбрать свойства и свойства окон нажав кнопку «Настройка» кнопку, затем меняется Значок свойства из 'hide when inactive' to 'always hide' может я сделать это в delphi или даже лучше, если я могу скрыть/показать (полностью) этот значок всякий раз, когда захочу (используя delphi)

+7

Почему вы хотите это сделать? И почему бы не понять, что система управления скрывает/показывает, что лоток использует (предположительно, в реестре), вместо того, чтобы возиться с компьютерами людей. Вмешательство в такие вещи вызовет у людей неприятность. Сетевые значки контролируются панелью управления, поэтому найдите параметр реестра, который отключает их. Работа выполнена. – mj2008

+0

Я не собираюсь возиться с компьютером других людей Я пишу личную программу, см. Edit2, делая это через реестр, мне придется перезагружать компьютер каждый раз? Я хочу скрыть/показать с помощью кнопки button на моей программе со скоростью –

+0

Значок подключения к Интернету можно скрыть, дважды щелкнув значок в трее, выберите свойства и снимите флажок «Показать значок в области уведомлений при подключении». –

ответ

4

API не предоставляет доступ к иконки других приложений. Единственный вариант - подклассировать сам системный лоток, чтобы перехватить сообщения окна, которые Shell_NotifyIcon() отправляет на него, чтобы вы могли отслеживать, какие HWND регистрируют идентификаторы значков.

+0

спасибо, см. мое редактирование –

+0

Невозможно запрограммировать доступ к встроенным функциям ОС «Скрыть, когда неактивно» и «Всегда спрятать». Опять же, ** ТОЛЬКО ** способ доступа и манипулирования чужими значками - это подключиться непосредственно к окну панели задач и перехватывать сообщения WM_COPYDATA от Shell_NotifyIcon() (см. Http://www.codeproject.com/KB/applications /ShellTrayInfo.aspx для содержимого сообщения), чтобы вы могли либо получить доступ к HWND и идентификаторам каждого значка, чтобы вы могли самостоятельно звонить на Shell_NotifyIcon(), либо просто блокировать сообщения, чтобы значки не доходили до системы лоток. –

+0

спасибо, что это был вид ответа, который я искал, arent сообщения, такие как WM_COPYDATA, часть окна api? Также пример в C++ (который я не знаю :-() у вас есть ссылка на пример delphi –

0

Если вы отвечаете за компьютер, на котором работаете, вы просто щелкаете правой кнопкой мыши по значку и отключите его вручную. Предположительно, это записывает некоторые настройки в реестре (используйте procmon, чтобы узнать), поэтому вы можете автоматизировать его через Active Directory.

Если вы не ответственны, это означает, что это не ваш, а просто какой-то случайный компьютер, и ваше приложение добровольно решает пойти вперед и скрыть значки, которые ему не нравятся, тогда нет, нет никакого API для этого, и закрутите вас за попытку. Это зависит от пользователя, чтобы решить, когда он хочет скрыть значок, а не вашу супер-крутую программу.

+3

Что делать, если кто-то хочет написать приложение, которое управляет значками в трее, например, позволяет пользователям выбирать, что показать, когда/где, .. винт тоже? –

+0

Это приложение уже написано. Это называется Explorer. В нем есть интерфейс для показа/скрытия значков и когда/whe чтобы показать их. Любое усовершенствование, которое не является частью Проводника, уже по определению является неустойчивым, поскольку оно должно полагаться на недокументированные функции и трюки, такие как поиск в Windows, чтобы заставить Explorer делать то, что он не должен делать. Так что это плохая идея. Тем не менее, делать это на правах пользователя возможно, потому что приложение может просто поднять себя до администратора, а затем делать все эти грязные трюки. К счастью, это не сработает. – himself

+2

Во-первых, в то время как более поздние ОС очень гибки в этом, прежние не являются. Во-вторых, настройка оболочки не является неслыханной. Я вижу много пользователей, использующих стороннее программное обеспечение, которые изменяют внешний вид/поведение того или иного. В-третьих, explorer является оболочкой по умолчанию, но есть и другие, и они реализуют функциональность systray ... Я уверен, что не могу думать о каждом действительном использовании. Дело в том, что приятно, что кто-то здесь не хочет помогать в создании вредоносного кода, нелегко быть в состоянии судить. Поэтому я возражал против тона вашего ответа. –

3

Пример использования часов, который вы указали, работает, потому что, хотя значок часов находится в той же области, что и лоток уведомлений, на самом деле это не одно и то же окно, кроме отдельного окна. Вы не можете скрыть один значок, используя тот же метод, потому что все они рассматриваются как единое целое.

Вы можете скрыть весь лоток уведомления, хотя:

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

Мне интересно, почему вы публикуете ответы на старый вопрос с принятым? Конечно, вы вправе это делать ... просто здесь немного не используется (по крайней мере, для меня). – jachguate

+3

Для людей (таких как я), которые находят этот вопрос в будущем и хотят объяснить, почему вы можете скрыть часы, но не отдельные значки в лотке. Никто этого не объяснил. – FSD

+0

hi fsd, я вошел в свою учетную запись переполнения стека после age.thanks для ответа –

 Смежные вопросы

  • Нет связанных вопросов^_^