Como simular uma tecla de baixo nível no OS X?
-
20-09-2019 - |
Pergunta
Estou tentando gerar programaticamente os eventos de teclado e keyup de teclado. Atualmente, estou usando o CGPostKeyboardEvent para fazer isso, mas estou procurando uma maneira de fazer isso em um nível mais baixo. Eu olhei para o ddhidlib, mas não consegui descobrir uma maneira de criar um evento falso. Alguém pode ajudar?
atualizar: Graças ao conselho de Weichsel, agora estou criando um evento importante com o seguinte:
CGEventRef e = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)52, true);
CGEventPost(kCGSessionEventTap, e);
CFRelease(e);
que eu encontrei aqui.
No entanto, meu problema ainda permanece, então vou elaborar um pouco. O aplicativo (terceira parte) que eu gostaria de enviar teclas para implementos DDHIDLIB Função de captura de chaves:
- (void) ddhidKeyboard: (DDHidKeyboard *) keyboard
keyDown: (unsigned) usageId;
E isso nunca é chamado usando o método atual. Meu palpite é que a chave para baixo simulada com o CGEVEventCreateKeyboardEvent é muito alta para ser capturada pelo ddhidkeyboard: keydown. Então, o que estou tentando fazer é criar o evento KeyDown em um nível suficientemente baixo, de modo que ele seja reconhecido pelo DDHIDKEYBOARD: KeyDown.
Solução
O que há de errado com os serviços de evento de quartzo?
Eu acho que você está no caminho certo, mas você deve usar CGEventCreateKeyboardEvent
ao invés de CGPostKeyboardEvent
Porque o último é descontinuado desde o Mac OS X 10.6.
Outras dicas
As torneiras de evento podem injetar no nível HID se você correr como raiz