Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

RusFAQ.ru: Win API


РАССЫЛКИ ПОРТАЛА RUSFAQ.RU

/ КОМПЬЮТЕРЫ И ПО / Языки программирования / WinAPI

Выпуск № 383
от 22.01.2007, 04:35

Администратор:Калашников О.А.
В рассылке:Подписчиков: 401, Экспертов: 37
В номере:Вопросов: 1, Ответов: 2


Вопрос № 71285: Здравствуйте. Есть ли ответ на такой вопрос: моя программа выполняется в минимизированном виде, иконка программы в системном трее. Каким образом мне можно бросить мышкой на иконку список объектов (файлы из Тотал Коммандера) так, чтобы получить этот с...

Вопрос № 71.285
Здравствуйте. Есть ли ответ на такой вопрос: моя программа выполняется в минимизированном виде, иконка программы в системном трее. Каким образом мне можно бросить мышкой на иконку список объектов (файлы из Тотал Коммандера) так, чтобы получить этот список моей программой?
Событие OnMouseUp не срабатывает, да и форма курсора у мыши - запрет действий.
Отправлен: 17.01.2007, 04:09
Вопрос задал: Бикинеев И.В. (статус: Посетитель)
Всего ответов: 2
Мини-форум вопроса >>> (сообщений: 4)

Отвечает: Tek
Здравствуйте, Бикинеев И.В.!
Посмотрите на струтуру NOTIFYICONDATA. У нее есть поля hWnd и uCallbackMessage, которые определяют соответсвенно дескриптор окна, получающего уведомления от иконки и ид сообщения, которое будет послано этому окну при совершении действий с иконкой с помощью мыши или клавиатуры.
Возможно как то раскрутить от этого.
---------
WinApi - жутко неудобные костыли, MFC и VCL - немногим полезнее, но ничего лучше еще не создано (C)Почти Уинстон Черчилль :)
Ответ отправил: Tek (статус: 7-ой класс)
Ответ отправлен: 17.01.2007, 09:46

Отвечает: burbot
Здравствуйте, Бикинеев И.В.!

Хотелось бы поделиться своими мыслями по поводу решения этого вопроса.

При драг-эн-дропе система постоянно проверяет стиль окна, находящегося под курсором. Если у окна установлен расширенный стиль WS_EX_ACCEPTFILES, то курсор примет форму стрелки с плюсиком, т.е. дропать можно. Если же стиль не установлен, то курсор - запрет действий.

Соответственно, решение нашей задачи начнем с того, что установим трею стиль WS_EX_ACCEPTFILES.

После того, как этот стиль будет установлен, система будеть дропать файлы на трей и посылать ему сообщение WM_DROPFILES.

Чтобы отловить и обработать это сообщение придется внедрять dll в процесс, который отвечает за трей, и устанавливать хук WH_GETMESSAGE.

В приложении небольшая тестовая программулька, которую я начал писать с целью изучения данного вопроса. Там екзешник и длл-ка. Запускаете екзешник - в трее появляется иконка. Из менюшки выбираете пункт "Установить трею стиль WS_EX_ACCEPTFILES". Программа установит стиль и поставит хук. Затем бросаете на трей файлы, получаете сообщения с путями к файлам. Внедрение dll осуществлялось строго по Рихтеру :)

Дальнейшие шаги:

во-первых, список файлов мы получаем в длл-ке (одно успокаивает - это наша длл-ка). Надо каким-то образом передавать его в программу. Решение возможно либо через маппированые в память файлы, либо через WriteProcessMemory, либо через клипбоард, либо ... придумайте сами, решений много :)

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

Вобщем, стоит ли такая красота такого гемороя, решать Вам.

Всего доброго!

Приложение:

Ответ отправил: burbot (статус: 1-ый класс)
Ответ отправлен: 22.01.2007, 01:27


Отправить вопрос экспертам этой рассылки

Приложение (если необходимо):

* Код программы, выдержки из закона и т.п. дополнение к вопросу.
Эта информация будет отображена в аналогичном окне как есть.

Обратите внимание!
Вопрос будет отправлен всем экспертам данной рассылки!

Для того, чтобы отправить вопрос выбранным экспертам этой рассылки или
экспертам другой рассылки портала RusFAQ.ru, зайдите непосредственно на RusFAQ.ru.


Форма НЕ работает в почтовых программах The BAT! и MS Outlook (кроме версии 2003+)!
Чтобы отправить вопрос, откройте это письмо в браузере или зайдите на сайт RusFAQ.ru.


© 2001-2007, Портал RusFAQ.ru, Россия, Москва.
Идея, дизайн, программирование: Калашников О.А.
Email: adm@rusfaq.ru, Тел.: +7 (926) 535-23-31
ООО "Мастер-Эксперт Про", Москва, 2007
Авторские права | Реклама на портале
Версия системы: 4.41 beta от 19.01.2007
Яндекс Rambler's Top100

В избранное