Научите како да пратите активност миша чак и када ваша апликација Делпхи није активна, седи у послужавник или заиста немам корисничко сучеље уопште.
Инсталирањем куке миша широм система (или глобалне) можете пратити шта корисник ради са миш и према томе поступати.
Шта је кука и како функционише?
Укратко, кука је (позове) функцију коју можете да креирате као део ДЛЛ-а (динамичка библиотека веза) или вашу апликацију за надгледање кретања у оперативном систему Виндовс.
Постоје 2 врсте кука - глобална и локална. Локална кука надгледа ствари које се догађају само за одређени програм (или нит). Глобална кука надгледа цео систем (све нити).
Да бисте креирали глобалну удицу, потребна су вам два пројекта, 1 за прављење извршне датотеке и 1 за ДЛЛ који садржи поступак удице.
Наш чланак о рад са Делпхи кукама на тастатури објашњава како пресрести унос тастатуре за контроле које не могу примити фокус улаза (попут ТИмаге).
Кукајући миша
По дизајну је кретање миша ограничено величином екрана радне површине (укључујући Виндовс траку са задацима). Када померите миш на леву / десну / горњу / доњу ивицу, миш ће се "зауставити" - како је и очекивано (ако немате више од једног монитора).
Ево идеје за куку миша на нивоу система: Ако, на пример, желите да померите миш на десну страну екрана када се помакне према левој ивици (и "додирне је"), можете написати глобалну куку миша да промените положај миша поинтер.
Започињете креирањем пројекта библиотеке динамичних веза. ДЛЛ би требао извести двије методе: "ХоокМоусе" и "УнХоокМоусе".
Процедура ХоокМоусе позива на СетВиндовсХоокЕк АПИ пролази „ВХ_МОУСЕ“ за први параметар - на тај начин инсталира поступак куке који надзире поруке миша. Један од параметара СетВиндовсХоокЕк-а је функција повратног позива коју ће Виндовс позвати када постоји порука миша коју треба обрадити:
СетВиндовсХоокЕк (ВХ_МОУСЕ, @ХоокПроц, ХИнстанце, 0);
Последњи параметар (вредност = 0) у СетВиндовсХоокЕк дефинише да региструјемо глобалну удицу.
ХоокПроц анализира поруке повезане са мишем и шаље прилагођену поруку („МоусеХоокМессаге“) нашем тестном пројекту:
функција ХоокПроц (нЦоде: Интегер; МсгИД: ВПарам; Подаци: ЛПарам): ЛРесулт; стдцалл;
вар
моусеПоинт: ТПоинт;
нотифиТестФорм: боолеан;
МоусеДирецтион: ТМоусеДирецтион;
започети
моусеПоинт: = ПМоусеХоокСтруцт (подаци) ^. пт;
нотифиТестФорм: = фалсе;
ако (моусеПоинт. Кс = 0) онда
започети
Виндовс. СетЦурсорПос (-2 + екран. Ширина, моусеПоинт.и);
нотифиТестФорм: = тачно;
МоусеДирецтион: = мдРигхт;
крај;
...
ако нотифиТестФорм онда
започети
ПостМессаге (ФиндВиндов ('ТМаинХоокТестФорм', нил), МоусеХоокМессаге, МсгИД, Интегер (МоусеДирецтион));
крај;
Резултат: = ЦаллНектХоокЕк (Кука, нЦоде, МсгИД, Подаци);
крај;
Савет: Прочитајте Вин32 СДК датотеке помоћи да бисте сазнали више о ПМоусеХоокСтруцт запису и потпису функције ХоокПроц.
Белешка: Функција кука не мора ништа слати било где - ПостМессаге позив користи се само да назначи да ДЛЛ може комуницирати са "спољним" светом.
Кука за миша "Слушалац"
Порука "МоусеХоокМессаге" је постављена у ваш тест пројекат - образац под називом "ТМаинХоокТестФорм". Превладаћете методом ВндПроц да бисте добили поруку и поступили по потреби:
процедура ТМаинХоокТестФорм. ВндПроц (вар Порука: ТМессаге);
започети
наслеђено ВндПроц (Порука);
ако Порука Мсг = ХоокЦоммон. МоусеХоокМессаге онда
започети
// имплементација пронађена у пратећем коду
Сигнал (ТМоусеДирецтион (порука). ЛПарам));
крај;
крај;
Наравно, када се образац створи (ОнЦреате), ви зовете поступак ХоокМоусе из ДЛЛ-а, а када се затвори (ОнДестрои), ви зовете поступак УнХоокМоусе.
Напомена: Куке имају тенденцију да успоравају систем јер повећавају количину обраде коју систем мора да обави за сваку поруку. Куку треба инсталирати само кад је то потребно и уклонити је што је пре могуће.