Вопрос № 71285: Здравствуйте. Есть ли ответ на такой вопрос: моя программа выполняется в минимизированном виде, иконка программы в системном трее. Каким образом мне можно бросить мышкой на иконку список объектов (файлы из Тотал Коммандера) так, чтобы получить этот с...
Вопрос № 71.285
Здравствуйте. Есть ли ответ на такой вопрос: моя программа выполняется в минимизированном виде, иконка программы в системном трее. Каким образом мне можно бросить мышкой на иконку список объектов (файлы из Тотал Коммандера) так, чтобы получить этот список моей программой?
Событие OnMouseUp не срабатывает, да и форма курсора у мыши - запрет действий.
Отвечает: 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