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

  • Рекомендуем проверить настройки временной зоны в вашем профиле (страница "Внешний вид форума", пункт "Часовой пояс:").
  • У нас больше нет рассылок. Если вам приходят письма от наших бывших рассылок mail.ru и subscribe.ru, то знайте, что это не мы рассылаем.
   Начало  
Наши сайты
Помощь Поиск Календарь Почта Войти Регистрация  
 
Страниц: [1]   Вниз
  Печать  
Автор Тема: Отслеживание кликов мыши!  (Прочитано 23246 раз)
0 Пользователей и 1 Гость смотрят эту тему.
Александр
Опытный

kz
Offline Offline
Пол: Мужской
Угадай кто?


WWW
« : 07-09-2003 07:10 » 

Привет!
У меня проблемма: Я пишу программу по учету пробега мыши и отслеживаю клики мыши левой, правой и средней если есть кнопок. Проблемма заключается в том что я не могу отследить клики мыши, получалось отследить в самой программе, но по всей винде ни как не получается, если есть предложения, то можно сразу писать листинг программы.
Заранее спасибо!
Записан

Бороться и искать, найти и перепрятать.
Гром
Птычк. Тьфу, птычник... Вот!
Готовлюсь к пенсии

il
Offline Offline
Пол: Мужской
Бодрый птах


« Ответ #1 : 07-09-2003 07:18 » 

Ну тут я точно по дельфи не скажу...
Есть возможность отслеживать из драйвера - когда тот кидает сообщения системе, как - не знаю, пока, и есть возможность запрашивать у системы фокусное окно, потом захватывать его сообщения и там перхватывать 2 типа сообщений
1. От мыши - клики пробег
2. От окна - по потере фокуса, при потере такового, спрашивать кто перехватил и отдавая управление сообщениями старому окну, захватывать активного текущего....

Функия перехватывающая очередь сообщений с любого окна в API:
GetWindowLong с параметром WindowProc...
Записан

А птичку нашу прошу не обижать!!!
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #2 : 18-09-2003 05:59 » 

тебе нужно копать SetWindowsHook, SetWindowsHookEx (грубо, очень грубо говоря - это виндовый аналог старых добрых TSR Улыбаюсь т.е. хуки вешаются практически на любые виды происходящий в винде событий. в частности, можно повесить хук на все сообщения. все эти хуки представляют собой очередь. когда генерится сообщение, оно отправляется в очередь хуков, это сообщение перехватывающих, причём хук, повешенный последним в очереди будет первым, что даёт возможность блокировать всю последующую обработку сообщения (именно так реализуется блокировка мыши и клав в компьютерных клубах). после того, как отработает очередь хуков, многострадальное сообщение, наконец, отправляется в окно,которому оно, собственно, и было изначально послано. посмотри справку по win32, входящую в комплект Delphi. тебе понадобится SetWindowsHookEx с idHook =WH_GETMESSAGE и, собственно, процедура хука, в которой ты будешь делать все свои подсчёты. декларация этой процедуры должна совпадать с декларацией GetMsgProc. при закрытии программы не забудь делать UnhookWindowsHookEx.
Записан

Александр
Опытный

kz
Offline Offline
Пол: Мужской
Угадай кто?


WWW
« Ответ #3 : 19-09-2003 13:40 » 

Спасибо!
Попробую вечерком и скажу что получилось, правда я уже пробова хуки мне бы побольше информации как их ставить или статью какую нмбудь, которая описывает всё подробно.
Записан

Бороться и искать, найти и перепрятать.
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #4 : 26-09-2003 06:08 » 

чтоит почитать вот это:

http://www.sources.ru/delphi/dll/hooks_aspects.shtml
http://www.sources.ru/delphi/delphi_introduction_to_hook_procedures.shtml
Записан

Александр
Опытный

kz
Offline Offline
Пол: Мужской
Угадай кто?


WWW
« Ответ #5 : 26-09-2003 13:15 » 

Спасибо!
Записан

Бороться и искать, найти и перепрятать.
Viktor Denk
Участник

de
Offline Offline

« Ответ #6 : 09-10-2003 10:51 » 

Privet!
Цитата

но по всей винде ни как не получается

Est' kakoe - to windows soobshchenie - kotoroe daet koordinaty myshi, dazhe esli ona ne v predelax okna, chto - to s NC_...(   Вот такой я вот ). Esli nado to najdu.
Moj E-Mail: vetoshkin@lycos.de
Записан

A u nas v Sibiri!
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #7 : 09-10-2003 10:59 » 

function GetCursorPos(var lpPoint: TPoint): BOOL; stdcall;

- возвращает позицию курсора в координатах экрана.
Записан

Viktor Denk
Участник

de
Offline Offline

« Ответ #8 : 13-10-2003 08:43 » 

Цитата: x77
function GetCursorPos(var lpPoint: TPoint): BOOL; stdcall;

- возвращает позицию курсора в координатах экрана.


Neploxaja funkcija, no nado ruchkami v cikle ili po tajmeru vyzyvat'. Posmotri sledujushchuju ssylku. Tam dano opisanie vsex sobyti' ot myshki, kak v klientskoj, tak i v neklientskoj oblasti:
http://www.firststeps.ru/mfc/steps/r.php?293
Pravda vse na VC++, no kakaja raznica na samom dele. Chut' chego pishi na mylo.
Записан

A u nas v Sibiri!
Александр
Опытный

kz
Offline Offline
Пол: Мужской
Угадай кто?


WWW
« Ответ #9 : 13-10-2003 15:02 » 

Цитата: x77
function GetCursorPos(var lpPoint: TPoint): BOOL; stdcall;

- возвращает позицию курсора в координатах экрана.


Я вообщето просил про клики мышки. Ну всё равно спасибо.
Записан

Бороться и искать, найти и перепрятать.
Александр
Опытный

kz
Offline Offline
Пол: Мужской
Угадай кто?


WWW
« Ответ #10 : 13-10-2003 15:08 » 

Viktor Denk, спасибо! Как раз то что мне нужно. Всё равно на С++ или нет сообщения у всех одинаковые и идут от Винды.
Записан

Бороться и искать, найти и перепрятать.
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #11 : 13-10-2003 15:17 » 

эти сообщения будут доступны только в самой программе: ты будешь "видеть" свои клики и т.д.   т.е. сообщений мыши от других программ ты через эти функции не получишь.
Записан

Viktor Denk
Участник

de
Offline Offline

« Ответ #12 : 13-10-2003 15:27 » 

Цитата: x77
эти сообщения будут доступны только в самой программе: ты будешь "видеть" свои клики и т.д.   т.е. сообщений мыши от других программ ты через эти функции не получишь.


Pravil'no. No chto meshaet global'ny' HOOK v dll posadit'? pri etom filtrovat' lish' myshinnye kliki. U "Chernogo programmista" est' na etu temu rabotajushchij primerchik, na "Masterax Delphi" tozhe mozhno najti. Mogu prislat', esli nado moju kollekciju, v osnovnom ne rabotajshchix. V delfijskom korolevstve est' to zhe.

S uvazheniem
viktor
Записан

A u nas v Sibiri!
x77
Модератор

ro
Offline Offline
Пол: Мужской
меняю стакан шмали на обратный билет с Марса.


« Ответ #13 : 13-10-2003 15:33 » 

дык о хуках изначально речь и шла Улыбаюсь
Записан

Viktor Denk
Участник

de
Offline Offline

« Ответ #14 : 15-10-2003 10:38 » 

Цитата: x77
дык о хуках изначально речь и шла Улыбаюсь


Tochno, naverno nado teper' sootvetstvujushchie konstanty dlja HOOK iskat', xotja v MSDN dlja VC++6.0 est' otmennaja stat'ja
Записан

A u nas v Sibiri!
Страниц: [1]   Вверх
  Печать  
 

Powered by SMF 1.1.21 | SMF © 2015, Simple Machines