Форум: "Система";
Текущий архив: 2002.07.08;
Скачать: [xml.tar.bz2];
ВнизТакой-вот странный вопрос, Где находится курсор !!!! Найти похожие ветки
← →
Dankin (2002-04-07 14:51) [0]Если быть точнее, то мне надо узнать кргда курсор находится над иконкой CD-ROM дисковода... ????
Заранее огромное спасибо...
← →
Anatoly Podgoretsky (2002-04-07 14:56) [1]А где иконка знаешь?
← →
watcher (2002-04-07 21:13) [2]The GetCursorPos function retrieves the cursor"s position, in screen coordinates.
BOOL GetCursorPos(
LPPOINT lpPoint // cursor position
);
← →
Dankin (2002-04-08 02:58) [3]GetCursorPos это понятно, а нельзя-ли узнать что конкретно под ним, или хотябы узнать какуюто наводку ???
← →
Anatoly Podgoretsky (2002-04-08 11:08) [4]Где иконка?
← →
watcher (2002-04-08 12:42) [5]Если иконка в твоем приложении посмотри сообщения дельфи CM_MOUSEENTER, CM_MOUSELEAVE
← →
Dankin (2002-04-10 03:02) [6]Ладно, объясняю более конкретно.
Моя программа является резидентной, ниаких своих окон, кнопок и т.п. она не выводит впринцепи. У пользователя на рабочем столе есть иконка cd-rom привода (предположем она есть), так вот
могу я как-нибудь узнать что курсор в данное время находится именно над этой иконкой, а не где-нибудь еще?
← →
Song (2002-04-10 08:18) [7]В общем случае не можете.
В частном - есть идея. Переберите все ярлыки для рабочего стола. А далее перейдите на его месторасположение. Если по ярлыку обнаружите дисковод - проверьте его тип, если оптический, запомните его координаты на экане и дальше сравнивайте.
← →
Almaz (2002-04-14 00:35) [8]>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, и уже из нее посылать сообщения.
В общем я из спортивного интереса написал работающий примерчик. Так что если кого интересует - милости прошу пишите - вышлю.
Удачи.
Страницы: 1 вся ветка
Форум: "Система";
Текущий архив: 2002.07.08;
Скачать: [xml.tar.bz2];
Память: 0.46 MB
Время: 0.005 c