Pergunta

Existe uma maneira de se inscrever para rato global de eventos movidos em Cocoa? Eu era capaz de se inscrever para os eventos usando InstallEventHandler() de carbono, mas preferiria um cacau equivalente. Eu olhei para eventos NSNotificationCenter, mas não parece haver quaisquer nomes de eventos públicos (estão lá os privados?)

Como alternativa, há uma maneira de usar NSTrackingArea de pontos de vista com um fundo clearColor?

O aplicativo só está Snow Leopard.

Foi útil?

Solução

Em SnowLeopard há um novo método de classe em NSEvent que faz exatamente o que você quer: + (id)addGlobalMonitorForEventsMatchingMask:(NSEventMask)mask handler:(void (^)(NSEvent*))block. Você vai querer mask = NSMouseMovedMask.

Outras dicas

Uma pergunta semelhante já foi perguntado sobre StackOverflow: Como fazer um NSView subclasse alça transparente eventos de mouse?

Para resumir, o método de vista tansparent não funcionou. Quartzo Taps eventos parecem ser a melhor resposta.

Aqui estão algumas dicas sobre como trabalhar com torneiras:

  1. Criar a torneira com CGEventTapCreate.
    a) Para a localização (primeiro) parâmetro que você provavelmente vai querer usar kCGSessionEventTap.
    b) Para a colocação (segundo) parâmetro que você provavelmente vai querer kCGHeadInsertEventTap.
    c) Para o parâmetro máscara evento, tente (1 << kCGEventMouseMoved).

  2. Crie uma fonte de loop de execução com CFMachPortCreateRunLoopSource, passando a torneira evento como o segundo parâmetro.

  3. Adicionar a fonte de loop de execução para o loop de execução. Supondo que você quer que ele adicionado ao ciclo de processamento principal, faça: CFRunLoopAddSource(CFRunLoopGetMain(), sourceFromStep2, kCFRunLoopDefaultMode);

  4. Ativar a torneira evento com CGEventTapEnable

Se você deseja controlar o mouse, não importa onde ele está, você quer um CGEventTap. Não há Cacau equivalente. Se você só quer segui-lo em sua aplicação, então você deve explicar por que você está encontrando-se incapaz de fazê-lo um pouco mais profundamente.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top