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.

Author: Colin Gislason , 2009-10-27

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.

 23
Author: Ben Stiglitz,
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:]}
  1. 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).

  2. Utwórz źródło pętli run z CFMachPortCreateRunLoopSource, przekazując Zdarzenie tap jako drugi parametr.

  3. 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);

  4. Włącz stuknięcie zdarzenia za pomocą CGEventTapEnable

 12
Author: Doug Richardson,
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ć.

 3
Author: Azeem.Butt,
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