|
|||||||
Как отлавливать клавиатурные события в MacOs
Время создания: 26.09.2011 18:59
Раздел: Компьютер - MacOs - Готовые решения
Запись: xintrea/mytetra_syncro/master/base/1317049144ls92fh1vcn/text.html на raw.github.com
|
|||||||
|
|||||||
Вопрос: Для утилиты сценариев я должен иметь возможность записать серию события клавиатуры и мыши, которые происходят, когда приложение находится в фокусе.Вторая часть является возможность отправить позже эти события для активного окна. Мне не нужно беспокоиться о меню и отслеживания идентификатор, какое окно получает вход. Я знаю, как это сделать под Windows, но понятия не имеют о Mac OS X. Ответ: Первое, что я скажу вам, что вы не можете сделать это, не позволяет пользователю поддержку assitive устройств в панели управления доступности. Это какой-то безопасности, встроенные в OSX. Вот код snippit я использую в одном из своих приложений, чтобы сделать это: //this method calls a carbon method to attach a global event handler - (void)attachEventHandlers { //create our event type spec for the keyup EventTypeSpec eventType; eventType.eventClass = kEventClassKeyboard; eventType.eventKind = kEventRawKeyUp; //create a callback for our event to fire in EventHandlerUPP handlerFunction = NewEventHandlerUPP(globalKeyPress); //install the event handler OSStatus err = InstallEventHandler(GetEventMonitorTarget(), handlerFunction, 1, &eventType, self, NULL); //error checking if( err ) { //TODO: need an alert sheet here NSLog(@"Error registering keyboard handler...%d", err); } //create our event type spec for the mouse events EventTypeSpec eventTypeM; eventTypeM.eventClass = kEventClassMouse; eventTypeM.eventKind = kEventMouseUp; //create a callback for our event to fire in EventHandlerUPP handlerFunctionM = NewEventHandlerUPP(globalMousePress); //install the event handler OSStatus errM = InstallEventHandler(GetEventMonitorTarget(), handlerFunctionM, 1, &eventTypeM, self, NULL); //error checking if( errM ) { //TODO: need an alert sheet here NSLog(@"Error registering mouse handler...%d", err); } } Here is an example of the callback method i am using: OSStatus globalKeyPress(EventHandlerCallRef nextHandler, EventRef theEvent, void *userData) { NSEvent *anEvent = [NSEvent eventWithEventRef:theEvent]; NSEventType type = [anEvent type]; WarStrokerApplication *application = (WarStrokerApplication*)userData; //is it a key up event? if( type == NSKeyUp) { //which key is it? switch( [anEvent keyCode] ) { case NUMERIC_KEYPAD_PLUS: //this is the character we are using for our toggle //call the handler function [application toggleKeyPressed]; break; //Comment this line back in to figure out the keykode for a particular character default: NSLog(@"Keypressed: %d, **%@**", [anEvent keyCode], [anEvent characters]); break; } } return CallNextEventHandler(nextHandler, theEvent); } |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|