Global Mouse przeniósł wydarzenia w kakao
Czy w Cocoa można zarejestrować globalne zdarzenia przenoszone myszą? Byłem w stanie zarejestrować się na wydarzenia za pomocą InstallEventHandler()
Carbon, ale wolałbym odpowiednik kakao. Szukałem NSNotificationCenter
wydarzeń, ale nie ma żadnych publicznych nazw wydarzeń(czy są prywatne?)
Alternatywnie, czy istnieje sposób użycia NSTrackingArea
dla widoków z tłem clearColor
?
Aplikacja jest tylko Snow Leopard.
3 answers
W SnowLeopard jest nowa metoda klasy na NSEvent
, która robi dokładnie to, co chcesz: + (id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void (^)(NSEvent*))block
. Będziesz chciał mask = NSMouseMovedMask
.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-27 17:17:45
Podobne pytanie zadano już na StackOverflow: Jak zrobić przezroczystą podklasę NSView obsługującą zdarzenia myszy?
Podsumowując, metoda tansparent view nie zadziałała. Kwarcowe kurki zdarzeń wydają się być najlepszą odpowiedzią.
Oto kilka wskazówek na temat pracy z kranami:]}Utwórz kran za pomocą
CGEventTapCreate
.
a) dla parametru location (first) prawdopodobnie będziesz chciał użyćkCGSessionEventTap
.
b) dla parametru umieszczania (drugiego) prawdopodobnie będziesz chciałkCGHeadInsertEventTap
.
c) dla parametru event mask spróbuj(1 << kCGEventMouseMoved)
.Utwórz źródło pętli run z
CFMachPortCreateRunLoopSource
, przekazując Zdarzenie tap jako drugi parametr.Dodaj źródło pętli run do pętli run. Zakładając, że chcesz go dodać do głównej pętli run, zrób:
CFRunLoopAddSource(CFRunLoopGetMain(), sourceFromStep2, kCFRunLoopDefaultMode);
Włącz stuknięcie zdarzenia za pomocą
CGEventTapEnable
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-05-23 12:17:17
Jeśli chcesz śledzić mysz bez względu na to, gdzie jest, chcesz CGEventTap. Nie ma odpowiednika kakao. Jeśli chcesz tylko śledzić to w swojej aplikacji, powinieneś dokładniej wyjaśnić, dlaczego nie jesteś w stanie tego zrobić.
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2009-10-27 02:17:29