Tray на Vb6

  • Автор темы GreatLion
  • Дата начала
Статус
Закрыто для дальнейших ответов.
G

GreatLion

#1
:( Люди помогите. У меня возникла проблема с трэйбаром. Как ни пытался, где ни искал(в нете, в справочниках и т.д.) нигде не мог найти как написать трэй. Трэй должен выискивать окна, которые в нем сидят, отображать их иконки, а также самое важное - посылать им сообщения типа левый клик, правый нажата кнопка и т.д. Если кто знает ссылки, или есть примеры, плиз, помогите.

И еще один вопрос? А как мне екстрактировать икону из exe'шника в IPictureDisp? Че не пробувал, не получилось. Пожалуйста, помогите, кто может, а то в воскресенье уже горит.
 
H

Hetman

#2
Вот небольшой FAQ, надеюсь тнайдёшь что-нибудь полезное.
По некоторым вопросам без API не обойтись.(я лично не представляю как без API отправлять события другим программам).

как подключить api функции можно найти в Microsoft Visual Basic 6.0->Microsoft Visual Basic 6.0 Tools->API Text Viewer (идёт в поставке с VB6).
Загрузив базу WIN32API.TXT
может чего найдёшь здесь
www.vbnet.ru
 

Вложения

G

GreatLion

#3
Огромное тебе спасибо. Я посмотрел те FAQ'и - там много очень полезного, хотя и не просмотрел пока полностью. Большое спасибо. Хочу заметить, что почти никто не знает что вообще сделать можно. Еще раз спасибо!!!!! :(
 
B

Barmutik

#4
Я в своё время прорыл много материалов .. НО ничего так толком и не нашёл ..

Потом выянислось что есть какой-то набор функций, но они не документированные.. в итоге я нашёл пак компонентов (без исходников B) ) и воспользовался для решения стоящей тогда задачи...

Лично мне было бы тоже интересно узнать как это можно сделать...

Если удастся что-то отрыть запостите сюда плиз ...
 
H

Hetman

#5
В файле WinAPI_guide_vb_.rar имеется неплохой faq по api
так вот там есть описание функции SendMessage

вот только сообщения когторые можно собирать по всем статьям, вот например то что относиться к вопросу:
MK_CONTROL
Нажата клавиша Ctrl.
MK_LBUTTON
Нажата левая кнопка мыши.
MK_MBUTTON
Нажата средняя кнопка мыши.
MK_RBUTTON
Нажата правая кнопка мыши.
MK_SHIFT
Нажата клавиша Shift.
MK_XBUTTON1
Windows 2000: Нажата первая кнопка X.
MK_XBUTTON2
Windows 2000: Нажата вторая кнопка X
 
H

Hetman

#6
А что касательно выковыривания иконок -
необходимо подключить функцию

Код:
Declare Function ExtractIcon Lib "shell32.dll" _     Alias "ExtractIconA" (byval hInst as Long, _     byval lpszExeFileName as string, _     byval nIconIndex as Long) as Long
Пример
 
G

GreatLion

#7
Проект в движении. Только я запоролся на одной штуке:

мне нужно поймать информацию из сообщения, посланного форме с определенным hwnd. Пример: какая-то программа создает и описывает объект, хранящий информацию об иконке, и посылает его в оконном сообщении окну трея. Так вот, нужно поймать это оконное собщение и выловить из него этот объект. Тогда все получится. Кто знает, где можно достать эту функцию, или знает эту функцию и ее использование, пожалуйста, и еще раз пожалуйста, напишите мне. С большим нетерпением буду ждать ответа. Плиз, помогите! :)
 
H

Hetman

#8
во-первых, какое ты посылаешь сообщение?(код, SendMessage?) если да, то там же два дополнительных параметра.
Условно говоря, если сообщение говорит программе о каком-то событии и передаём через параметры ниши данные, то в самой программе ловим это событие и затем обрабатываем параметры, через которые передаються данные :) во закрутил.
 
H

Hetman

#9
Если ты посылаешь клик, то его и обрабатывай. Или чёго у тебя там?
 
G

GreatLion

#10
<!--QuoteBegin-Hetman+29:11:2005, 02:30 -->
<span class="vbquote">(Hetman @ 29:11:2005, 02:30 )</span><!--QuoteEBegin-->Если ты посылаешь клик, то его и обрабатывай. Или чёго у тебя там?
[snapback]27780" rel="nofollow" target="_blank[/snapback]​
[/quote]
У меня другое:
кто-то, неизвестно кто, отправляет сообщение, а я его должен получить, зная hwnd окна, которому послали сообщение.
 
B

Barmutik

#11
Вешайте хук на систему и ловите сообщения .. потом фильтруйте по хэндлу окна и смотрите что Вам надо ...
 
G

GreatLion

#12
А вот сообщения трэю не ловятся. Я вычислил его hwnd, а вот сообщения его - нет. Даже клики мышкой.

Есть второй вариант: но у меня не получилось отправить сообщение окну с hwnd, который я знаю, который сидит в трэе. Обычному окну - отправляет, а в трэе - нет. Помогите, как отправить это сообщение?
 
B

Barmutik

#13
Насколько мне известно в трэе не сидит никакое окно .. там другой механизм ..

Просто приложения которые хотят иметь там иконку просто регистрируют его и казывают какому окну и какое сообщение посылать...

Посмотрите ShellNotifyIcon...
 
G

GreatLion

#14
Скажем, что я нашел те окна, которые сидят в трэе. У них особый обработчик событий. Но сообщения им не посылаются. Я так думаю, что это из-за того, что они скрыты(Visible=False). Но как тогда посылать сообщения?
 
H

Hetman

#15
На сайте Xakep.ru имеется статейка как изменить кнопку "пуск"
так вод там есть такая фраза:
" Кнопка "Пуск" имеет имя класса "Shell_TrayWnd". Точнее сказать, это класс всей панели задач."
Т.е имхо нужно передавать сообщение иконке как элементу трея, а не как отдельному окну.

Или может поискать исходники программы где это уже сделано?
 
G

Guest

#16
Не потскажете ну ГДЕ найти ПОЛНЫЙ справочник по API - функциям к visualBasic - у(6.0)???????????????????????????????????????????????????
 
Статус
Закрыто для дальнейших ответов.