Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Delphi: Для новичков > Определить расширения файла при наведение курсора


Автор: SyncMaster 23.2.2010, 06:31
Здравствуйте.

Прощу помощи у знающих людей.

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

На пример курсор мыши находится над файлом  readme.txt мое приложение определило, что расширение у файла .txt, после чего приложение (мое) открывает блакнот..


Буду признателен, если будет не большой примерчик.

Искал и че то не нашел, если такая тема уже есть киньте ссылку.

Заранее большое спасибо.

Автор: morpheyushka 23.2.2010, 12:24
Для начала такой вопрос - где наводишь курсор на файл?

Автор: SyncMaster 23.2.2010, 18:50
это может быть любая область ОС,  например диск - c:\  у нас там есть файлы, папки и.т.д вот там наводим курсор на файл, и наше приложение определяет его расширение и.т.д...

Автор: Mikel 23.2.2010, 22:05
В таком случае тебе надо переписать explorer.exe smile Или поставить в соответствии всем типам файлов в системе твой ехешник, а там уже по расширению как вызовут твою программу открывать что нужно.

Автор: SyncMaster 24.2.2010, 00:41
Цитата(Mikel @ 23.2.2010,  22:05)
В таком случае тебе надо переписать explorer.exe smile Или поставить в соответствии всем типам файлов в системе твой ехешник, а там уже по расширению как вызовут твою программу открывать что нужно.

Не понял, видь сама ос (виндовс) видь может определять тип файла, на пример когда наводим курсор мышки на файл, появляется подсказка. а разве таким же макаром нельзя определить расширение файла?

Автор: Данкинг 24.2.2010, 01:08
Если сделаешь свой файловый менеджер - то в нём, разумеется, сможешь и определения типа файла сделать. А прямо в Explorer'ре - сильно сомневаюсь. smile 

Автор: SyncMaster 24.2.2010, 06:35
Можно сделать, на пример если выбрать файл или папку то моя программа перехватывает события и передает инфу моей программе, и программа выводит путь к папке и имя папки, если выбран файл то названия файла.

теперь надо разобратся какое событие отвечает за Hints в винде и перехватить его, класс нашел tooltips_class, и тогда можно будет получить все что появляется в подсказке при наведение курсора мышки на файл. 

И ничего не надо переписывать...

Автор: Rrader 24.2.2010, 06:52
В принципе нет ничего сложного, для этого придуман http://wmsdk.com/2009/07/09/directui-iaccessible/. Ставишь хук на мышь, в нем отслеживаешь, в каком окне находится курсор - если это SysListView32, вызываешь GetAncestor и сверяешь класс с CabinetWClass. Дальше вызываешь AccessibleObjectFromPoint и проверяешь роль объекта (должна быть ROLE_SYSTEM_LISTITEM). Если все проходит успешно, у тебя на руках есть текст item'а, над которым сейчас курсор. Дальше можно раскрутить полный путь, определить расширение и т.д.

Да, лучше не сверять классы окна, потому что,в Windows 7, к примеру, SysListView32 уже не найти. Нужно искать по другим признакам - принадлежность к explorer.exe, стили окна, оконные свойства, запрос интерфейсов и т.д.

Автор: SyncMaster 24.2.2010, 07:09
Цитата(Rrader @ 24.2.2010,  06:52)
В принципе нет ничего сложного, для этого придуман http://wmsdk.com/2009/07/09/directui-iaccessible/. Ставишь хук на мышь, в нем отслеживаешь, в каком окне находится курсор - если это SysListView32, вызываешь GetAncestor и сверяешь класс с CabinetWClass. Дальше вызываешь AccessibleObjectFromPoint и проверяешь роль объекта (должна быть ROLE_SYSTEM_LISTITEM). Если все проходит успешно, у тебя на руках есть текст item'а, над которым сейчас курсор. Дальше можно раскрутить полный путь, определить расширение и т.д.

Ага то что нужно, спасибо большое...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)