|
и снова трей
|
|||
---|---|---|---|
#18+
забросил старую перспективную прогу из-за того, что до сих пор никто не знает, как удалить значок чужого приложения из трея(иконки справа в области уведомлений). долго думал, вот несколько идеек. какие из них выполнимы?.. 1)копировать из трея все иконки, запустить постороннюю прогу, которая добавить иконку в трей, удалить все иконки и обратно вставить копированные в самом начале иконки. 2)как-то блокировать трей на пару секунд в то время, когда посторонняя прога будет добавлять иконку 3) пометить уже находящиеся иконки в трее, добавить иконку посторонней проги, пройтись по всем иконкам и удалить непомеченную 4) пометить иконку посторонней проги при добавлении в трей и удалить помеченную 5) блокировать все команды, влияющие на трей на пару секунд во время добавления значка посторонней прогой старые идеи, в правильности которых люди на форумах до сих пор не пришли к единому мнению: 1) узнать хендл посторонней проги во время её открытия, послать в трей команду с использованием этого хендла 2) узнать хендл посторонней проги во время её открытия, узнать хендлы всех дочерних окон, послать в трей команду на закрытие с использованием хендлов дочерних окон последовательно(на авось, может хендл одного из дочерних окон посторонней проги совпадает с хендлом значка этой проги в трее) 3) заранее узнать ID значка этой проги на одном компьютере, а затем послать команду в трей на закрытие, используя лишь ID значка; ID значка всегда одинаковый, независимо от внешник условий 4) хендл значка в трее никак не связах с хендлами проги 5) у значка вообще нет хендла 6) никак нельзя кикнуть значок чужой проги из трея воть почти всё, что известно насчёт удаления чужого значка из трея... но результат не достигнут. буду рад услышать ваше мнение что и как ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 13:26 |
|
и снова трей
|
|||
---|---|---|---|
#18+
несанкционированное управление сторонней программой противозаконно ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 13:52 |
|
и снова трей
|
|||
---|---|---|---|
#18+
Konst_Oneнесанкционированное управление сторонней программой противозаконно Гы :) такой статьи в УК пока нету :) А что касается удаления трей-иконки - все предложенные способы - глупости, а те кто говорит что нельзя - они правы... ну вообще то можно - но универсального способа тут нет... трей - это не какое то окно принадлежащее исполняющейся программе... и это не иконка которая имеет свой ID или хэндл... трей это системное окно - с которым можно взаимодействовать, изменяя его сотояние (как визуальное - например иконки, так и не визуальное - например определять способы реакции на действия) посредством некоторого набора функций... и ещё раз повторюсь - трей никак не связан с выполняемым приложением... это когда взаимодействуешь с треем - система отправляет приложению сообщение о каком либо событии (клик правой кнопкой мыши в трее, двойной клик левой и т.п.) Всё взаимодействие на уровне API - осуществляется через функцию BOOL Shell_NotifyIcon( DWORD dwMessage, PNOTIFYICONDATA lpdata ); где dwMessage - может быть: NIM_ADD NIM_DELETE NIM_MODIFY NIM_SETFOCUS В данной ситуации нужно воспользоваться сообщением NIM_DELETE, которое необходимо послать от лица программы, значок которой нужно убрать из трея. Но тут - болт, который сидит во втором параметре функции - Shell_NotifyIcon. Второй параметр - указатель на структуру NOTIFYICONDATA в поле uID которой содержится идентификатор "сеанса", открытого к трею - некий числовой идентификатор, который нужно знать, для того чтобы обращаться к добавленной иконке. Если хэндл окна любого запущенного приложения можно узнать и продублировать его для использования в своём процессе - пусть и с ограничениями и даже вообще без предположения о том связан сеанс трея именно с этим окном, или с другим (ничего плохого не случится если окно не инициирует работу с треем)... то вот этот самый идентификатор сеанса откуда ты узнаешь? будешь перебирать все окна процесса и для каждого хэндла окна перебирать все возможные идентификаторы? а их в DWORD - влезит 4 миллиарда с копейками... так что вся эта идея - ерунда. И - интересно, что за такая перспективная программка? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 15:11 |
|
и снова трей
|
|||
---|---|---|---|
#18+
majestic-mike, и всё же... на других форумах люди тоже не могут сойтись в мнении. как-то полюбэ можно. к примеру на ХР проблема решена удалением последней добавленной иконки. на семёрке это пока не работает. лан, у кого будет идеи - пишите, буду рад ... |
|||
:
Нравится:
Не нравится:
|
|||
18.07.2011, 22:49 |
|
и снова трей
|
|||
---|---|---|---|
#18+
majestic-mikeто вот этот самый идентификатор сеанса откуда ты узнаешь? будешь перебирать все окна процесса и для каждого хэндла окна перебирать все возможные идентификаторы? на одном из форумов люди сошлись во мнении, что BelowZero ID значка всегда одинаковый, независимо от внешник условий т.е. мона узнать ID на своём компе, такой же он будет на других и при других условиях. правда или нет я хз, для полноты картины нужно много мнений... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 11:16 |
|
и снова трей
|
|||
---|---|---|---|
#18+
BelowZero, Да ну нет же шь :) Когда я отправляю NIM_ADD = я указываю этот код... системе, трею и прочим - абсолютно пофигу, что я туда передам... просто если приложение создаёт несколько иконок - оно как то должно различать их для того, чтобы допустим поменять состояние именно той иконки, которая нужна, а не другой... Посмотри во вложении - небольшой пример... Там я определяю две константы Const TrayCellId_1 As Long = 1000 Const TrayCellId_2 As Long = 2000 для первой иконки в трее, и для второй... То что сделали для XP - это вероятнее всего частный случай и не универсальный, т.к. думаю что приложения которые добавляют в трей только одну иконку - передают в качестве ID какое то значение 0 или 1 - которое возможно и повторяется (с некоторой долей вероятности)... я вот например передаю туда 1000 и 2000... кто нибудь другой передаст 3000 и 4000... и т.д. Я вот об этом пытаюсь сказать... единственный способ - это наверное сабклассинг самого трей окна... но для этого нужно в деталях знать что и где там происходит... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 13:57 |
|
и снова трей
|
|||
---|---|---|---|
#18+
majestic-mike, На ХР рабортает идеально, удалёяет "нулевую" иконку, ею как раз является последняя добавленная в трей иконка. не нужно знать ни хендл ни ID иконки. в семёрке нулевая иконка - самая левая иконка в трее, для дела это никак не поможет... насчёт ручной прописи ID... так ведь и у вас и у меня на компе иконка будет иметь ID 1000 и 2000? значит, можно узнать ID иконки посторонней проги, а затем послать трею сообщение, используя ID иконки? ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 15:36 |
|
и снова трей
|
|||
---|---|---|---|
#18+
BelowZero, Ну я не знаю что там и как удаляется с нулевой иконкой :) может вы раскажите хитрый, шаманский способ - но я думаю, что если это происходит без отправки соответствующего сообщения - происходит утечка ресурсов... А на счёт этого я и пытаюсь вам рассказать - что нужно знать ID иконки и действовать от имени окна, которое её создало... но ID - я вам сказал, и они указаны в исходнике... а в боевых условиях вы как их выяснять будете? запускать каждую прогу из отладчика и смотреть - а какой ей идентификатор решил присвоить разработчик? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 16:51 |
|
и снова трей
|
|||
---|---|---|---|
#18+
majestic-mike, итак, мы были на ступени BelowZero6) никак нельзя кикнуть значок чужой проги из трея а теперь уже BelowZeroзаранее узнать ID значка этой проги на одном компьютере, а затем послать команду в трей на закрытие, используя лишь ID значка; ID значка всегда одинаковый, независимо от внешник условий видимый прогресс) значит осталось узнать ID иконки этой посторонней проги(скайпа, если кто знает, напишите плз) и как-то узнать хендл... а если хендл никак не связан с самой прогой, то как его узнать? или всё-таки связан? сейчас мы остановились на теории BelowZero4) хендл значка в трее никак не связах с хендлами проги ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 17:03 |
|
и снова трей
|
|||
---|---|---|---|
#18+
> Автор: majestic-mike месье НижеНуля страдает фигнёй, потому что я когда пишу программы работающие с треем, всегда по таймеру удаляю\добавляю иконку в трей. По опыту, если срубить и потом снова запустить процес explorer.exe то иконки некоторых приложений теряются из трея и работающая программа становится неуправляема. Приходится убивать процес и запускать снова. Поэтому у меня всегда есть код, который восстанавливает иконку в трее. И не только у меня. Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 17:07 |
|
и снова трей
|
|||
---|---|---|---|
#18+
BelowZero, Мы на этой ступени и находились... если бы вы внимательно читали мой пост (3-й сверху), а не гнались за "неведомым счастьем" - вы бы на это обратили внимание :) Так же действительно рекомендую прислушаться к словам "Игорь Горбонос" Хотя пока мы тут спорим - в моём больном мозгу проскочила одна идея... попробую её на практике и сообщу о результатах позднее... ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 17:19 |
|
и снова трей
|
|||
---|---|---|---|
#18+
ммм не сомневаюсь в ваших знаниях, но мне тяжело смотреть на комменты "это не возможно". в программировании возможно всё, могут быть лишь проблемы в идее, знаниях и в воплощении задуманного. в данном случае проблемы с знаниями воздействия на трей. код, удаляющий иконку по порядковому номеру существует, его мне помог надыбать тим-тим в одном из прошлых многочисленных топиков. Игорь Горбоноспотому что я когда пишу программы работающие с треем, всегда по таймеру удаляю\добавляю иконку в трей. По опыту, если срубить и потом снова запустить процес explorer.exe то иконки некоторых приложений теряются из трея и работающая программа становится неуправляема. Приходится убивать процес и запускать снова. Поэтому у меня всегда есть код, который восстанавливает иконку в трее. И не только у меня. - это никак не мешает поставленной цели, всего лишь формальности. *и свой код я, а уж тем более те, кому будет удосужено запустить программу, не посчитают фигнёй ... |
|||
:
Нравится:
Не нравится:
|
|||
19.07.2011, 20:10 |
|
и снова трей
|
|||
---|---|---|---|
#18+
BelowZero, как у Вас дела с треем, там http://www.cyberforum.ru/visual-basic/thread334883.html энтузиаст, что-то наваял ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2011, 17:11 |
|
и снова трей
|
|||
---|---|---|---|
#18+
Ципихович Эндрю, не то ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2011, 17:16 |
|
и снова трей
|
|||
---|---|---|---|
#18+
BelowZeroв программировании возможно всё, могут быть лишь проблемы в идее, знаниях и в воплощении задуманного+1, у тебя куча проблем, ты перечислил лишь малую часть. Когда бредовые идеи отпадают, оказывается, что в оставшихся действительно возможно все. Только нахрен не нужно. BelowZeroэто никак не мешает поставленной целиТоже нельзя не согласиться. И тоже можно дополнить: зато это эффективно мешает ее достижению. ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2011, 17:47 |
|
и снова трей
|
|||
---|---|---|---|
#18+
Antonariy, если ваше сообщение не продвигало тему вверх по топику то это был бы 100% флуд) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2011, 19:36 |
|
и снова трей
|
|||
---|---|---|---|
#18+
BelowZero, Покажи то, что ты сам реально сделал для достижения своей цели по данной тематике(в коде, а не на быдлофлудском языке) ... |
|||
:
Нравится:
Не нравится:
|
|||
21.07.2011, 20:12 |
|
и снова трей
|
|||
---|---|---|---|
#18+
timtimBelowZero, Покажи то, что ты сам реально сделал для достижения своей цели по данной тематике(в коде, а не на быдлофлудском языке) т.е.? как что-то сделать, если вы сами не знаете, с чего начать? и никто на форумах инета по программированию не знает, или все молчат. сначала скажите, какая из вышеперечисленных теорий правильная? тогда хоть можно будет примерно знать, с чего начинать ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2011, 14:50 |
|
и снова трей
|
|||
---|---|---|---|
#18+
BelowZero, Ты хочешь что бы за тебя кто то всё сделал и дал готовый код? Какие ещё теории? Садись да набивай код! Если знаний не хватает открывай книжки и читай. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2011, 15:21 |
|
и снова трей
|
|||
---|---|---|---|
#18+
> Автор: timtim > Какие ещё теории? Садись да набивай код! Если знаний не хватает открывай книжки и читай. +100500 Posted via ActualForum NNTP Server 1.4 ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2011, 15:26 |
|
и снова трей
|
|||
---|---|---|---|
#18+
Сколько же можно страдать муйней на форумах вместо того, чтобы почитать документацию производителя, которой вагон? Трей это обычный тулбал, имеющий обычный hWnd, значки это обычные кнопки, которые удаляются обычным SendMessage + TB_DELETEBUTTON. Все остальные старые идеи — клинический дебилизм, как, впрочем, и идея самОй "перспективной проги", разу уж эта фича в ней ключевая. Если я замечу, что какой-то быдлософт посягает на МОИ значки — в топку его, быстро, решительно. За сим прошу дюка закрыть эту ересь. ... |
|||
:
Нравится:
Не нравится:
|
|||
22.07.2011, 15:38 |
|
и снова трей
|
|||
---|---|---|---|
#18+
timtim, Игорь Горбонос, Antonariy, бред. я не прошу написать код, а лишь сказать, какой из вышеперечисленный способов верный. AntonariyСколько же можно страдать муйней на форумах вместо того, чтобы почитать документацию производителя, которой вагон? угу, вы почитали, и выложили BelowZeroкод, удаляющий иконку по порядковому номеру существует, его мне помог надыбать тим-тим в одном из прошлых многочисленных топиков., но авторна семёрке это пока не работает в этом-то и проблема. и странно, что вы считаете ересью всё, что пока что не знаете ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2011, 11:53 |
|
и снова трей
|
|||
---|---|---|---|
#18+
BelowZeroв этом-то и проблема.И слава богу. Хотя бы семерка слегка защищена от быдлокодеров. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2011, 12:16 |
|
и снова трей
|
|||
---|---|---|---|
#18+
Antonariy, не понимаю в чём притензии. я попросил подсказать, в каком направлении двигаться. в ответ: "читай книжки", "это слишком просто", "может за тебя ещё код написать?", "полный бред", "неполучается?ну и хорошо", "а может твоя прога плохая?не будем помогать", "кому нужен этот быдло код" и тд и тп. что не так-то?.. не знаете - так и напишите, зачем выкладывать бессмысленное видео, которое ничем не помогает в решении проблемы, при этом указывая на бесполезность действий программы и защищённость виндоус7 (хотя никакая это ёпт не защита, а смесь незнаний программистов+мнимое улучшение виндоуса). при этом топики расстут на несколько страниц, хотя вопрос сформулирован чётко и ясно, и мне бы хватило 1 слова с указанием направления работы. потом топики закрываются за большое содержание флуда. а кто в этом виноват? конечно афффтор топика, т.к. ... хз почему. ... |
|||
:
Нравится:
Не нравится:
|
|||
23.07.2011, 16:07 |
|
|
start [/forum/topic.php?fid=60&msg=37361803&tid=2158520]: |
0ms |
get settings: |
9ms |
get forum list: |
16ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
34ms |
get topic data: |
9ms |
get forum data: |
3ms |
get page messages: |
56ms |
get tp. blocked users: |
1ms |
others: | 341ms |
total: | 475ms |
0 / 0 |