![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Такой-вот странный вопрос, Где находится курсор !!!! [D5, D6, Win95/98, WinME, WinXP]
Dankin © (2002-04-07 14:51:00)Если быть точнее, то мне надо узнать кргда курсор находится над иконкой CD-ROM дисковода... ????
Заранее огромное спасибо...
Almaz (2002-04-14 00:35:00) [1]>Song, Dankin
Можно и в общем случае. Но сложно. Принцип следующий
1. Через GetCursorPos определяем где мышь
2. Через WindowFromPoint определяем над каким она окном
3. Через GetClassName определяем класс этого окна
4. Если этот класс - "SysListView32" значит это окно explorer.
5. Через сообщение LVM_HITTEST определяем индекс иконки над которой курсор в данное время
6. Через сообщение LVM_GETITEMTEXT получаем текст под иконкой
7. Тест иконки для любого диска будет иметь вид (в случае стандртной иконки) "Метка_диска (X:)" где X - буква диска.
8. Далее проверяем принадлежит ли эта буква CD-ROM"у и все.
Все, хоть и звучит довольно просто, довольно сложно в реализации. Так как на шаге 5 и 6 параметрами сообщений являются указатели, а их передача через границы процессов проблематична. Поэтому придеться создать DLL, и через глобальный hook инжектировать ее в explorer, и уже из нее посылать сообщения.
В общем я из спортивного интереса написал работающий примерчик. Так что если кого интересует - милости прошу пишите - вышлю.
Удачи.
Song (2002-04-10 08:18:00) [2]В общем случае не можете.
В частном - есть идея. Переберите все ярлыки для рабочего стола. А далее перейдите на его месторасположение. Если по ярлыку обнаружите дисковод - проверьте его тип, если оптический, запомните его координаты на экане и дальше сравнивайте.
Dankin (2002-04-10 03:02:00) [3]Ладно, объясняю более конкретно.
Моя программа является резидентной, ниаких своих окон, кнопок и т.п. она не выводит впринцепи. У пользователя на рабочем столе есть иконка cd-rom привода (предположем она есть), так вот
могу я как-нибудь узнать что курсор в данное время находится именно над этой иконкой, а не где-нибудь еще?
watcher (2002-04-08 12:42:00) [4]Если иконка в твоем приложении посмотри сообщения дельфи CM_MOUSEENTER, CM_MOUSELEAVE
Anatoly Podgoretsky (2002-04-08 11:08:00) [5]Где иконка?
Dankin (2002-04-08 02:58:00) [6]GetCursorPos это понятно, а нельзя-ли узнать что конкретно под ним, или хотябы узнать какуюто наводку ???
watcher (2002-04-07 21:13:00) [7]The GetCursorPosfunction retrieves the cursor"s position, in screen coordinates.
BOOL GetCursorPos(
LPPOINT lpPoint // cursor position
);
Anatoly Podgoretsky (2002-04-07 14:56:00) [8]А где иконка знаешь?