Форум программистов «Весельчак У»
  *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Кликалка  (Прочитано 18443 раз)
0 Пользователей и 1 Гость смотрят эту тему.
DarkAflar
Гость
« : 22-03-2008 14:07 » 

Есть ф-я, ктороая будет возвращать true при клике мышью?
Т.е. суть проги:
1)включаю прогу
2)Кликаю в произвольном месте экрана( т.е. не в самом приложении)
3)То, что я кликнул, записавается в массив.
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #1 : 22-03-2008 14:22 » 

Вешаеш глобальный хук на мышь. и будет тебе
Цитата
2)Кликаю в произвольном месте экрана( т.е. не в самом приложении)
Насчет
Цитата
Есть ф-я, ктороая будет возвращать true при клике мышью?
Не совсем понял. Есть сообшение системы WM_LBUTTONCLICK, WM_RBUTTONCLICK. Которые приходят в обработчик сообшений программы, если шелчки происходят в зоне окна программы.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
DarkAflar
Гость
« Ответ #2 : 22-03-2008 15:27 » 

хуки. теорию прочитал. Без примера, как всё это юзать, даже не могу представить.
Т.е. если делать по тупому, то принцип такой:
if( левой клик == true)
a = 1;
if( двойной клик == true)
a = 2;
if( правой клик == true)
a = 3;
Как это реализовать программно? Ума не приложу.
Дай пример, плз)

Записан
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #3 : 22-03-2008 15:32 » 

DarkAflar, по хукам хороший разбор и пример был у Рихтера, кажется, в "Windows для профессионалов" - поищи в сети, мне в электронном виде 4е издание этой книги встречалось.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #4 : 22-03-2008 15:44 » 

Можно без хуков сделать гораздо проще. Пример - в графическом редакторе я могу вытянуть линию далеко за пределы окна (тс в невидимую область) - и всё работает. Те простые сообщения отлавливать предварительно их захватив (capture). Как именно это в борланде делать не знаю.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
Вад
Модератор

ru
Offline Offline
Пол: Мужской

« Ответ #5 : 22-03-2008 15:45 » 

Джон, что-то типа drag-n-drop?
Записан
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #6 : 22-03-2008 16:11 » 

Джон, Там идет захват мыши. При этом мышовые сообшения не попадают в другие приложения. И второй момент. Любое другое приложение может перехватить захват. В поставленной задаче, как раз не нужно захватывать мышь. А просто отслеживать клики мыши, при этом чтобы, другие приложения не страдали.
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
Finch
Спокойный
Администратор

il
Offline Offline
Пол: Мужской
Пролетал мимо


« Ответ #7 : 22-03-2008 16:35 » 

Вот похожая тема на форуме https://forum.shelek.ru/index.php/topic,745.0.html
Записан

Не будите спашяго дракона.
             Джаффар (Коша)
zubr
Гость
« Ответ #8 : 22-03-2008 17:15 » 

Можно попробовать вместо глобального хука воспользоваться функцией LowLevelMouseProc (по описанию позволяет перехватывать сообщения мыши других приложений из локального хука), хотя я никогда ею не поользовался.
Записан
Джон
просто
Администратор

de
Offline Offline
Пол: Мужской

« Ответ #9 : 22-03-2008 18:20 » 

Вад, да это ещё один пример такого отлавливания.

Вить, в условии задачи ничего не стоит про дуругие программы и пр. Захват выполняет поставленные условия.
Записан

Я вам что? Дурак? По выходным и праздникам на работе работать. По выходным и праздникам я работаю дома.
"Just because the language allows you to do something does not mean that it’s the correct thing to do." Trey Nash
"Physics is like sex: sure, it may give some practical results, but that's not why we do it." Richard P. Feynman
"All science is either physics or stamp collecting." Ernest Rutherford
"Wer will, findet Wege, wer nicht will, findet Gründe."
DarkAflar
Гость
« Ответ #10 : 12-07-2008 11:33 » 

Нужно сделать именно хук с динамической линковкой длл.
Уже 4 месяца в сети ищу.
Читал книги.
Все ерунда.
Ничего не работает.
Бред какой-то.
Нигде нет ниодного нормального примера для шестого билдера.
Преподы тоже козлятся помогать, наверное, сами не знают как это сделать.
Перерыл архангельского - там тоже одна вода.
Наверное, никто просто-напросто этого не может сделать-)
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #11 : 12-07-2008 11:54 » 

по идее, должно быть что то вроде
Код:
LRESULT CALLBACK MouseProc( int nCode,    WPARAM wParam,    LPARAM lParam)
{
   //...
   //...

return CallNextHookEx(hk,nCode,wParam,lParam);
}


HHOOK hk;
hk=SetWindowsHookEx(WH_KEYBOARD,MouseProc,0,0);

только я тоже не смог заставить работать... Вертает hk==0
Записан

zubr
Гость
« Ответ #12 : 12-07-2008 13:12 » 

Ребята, да все должно работать.  Хендл на хук надо передавать в другие приложения (ведь длл подгружается в каждое приложение, в котором вызывается хуковое событие) файлмаппингом или через расшаренную память. Выкладываю свой проект (несколько лет назад в 6-й студии ваял) - кеймаузлоггер, записывающий в лог-файл какая кнопка мыши или клавы нажата в каком приложении, а также по таймеру координаты курсора мыши.
З.Ы. Если интересно, в авторское ПО можно будет выложить.

* Project.zip (78.1 Кб - загружено 925 раз.)
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #13 : 12-07-2008 13:14 » 

Хендл на хук надо передавать в другие приложения
 

дык энто ...
Цитата: мну
Вертает hk==0
Записан

zubr
Гость
« Ответ #14 : 12-07-2008 13:22 » 

Алексей1153++, надо hInstance длл передавать в SetWindowsHookEx
Записан
Алексей++
глобальный и пушистый
Глобальный модератор

ru
Offline Offline
Сообщений: 13


« Ответ #15 : 12-07-2008 13:31 » 

zubr, понятно
Записан

Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines