OS X에서 CGEventCreateKeyboardEvent로 Caps Lock 키 스트로크를 시뮬레이션 한 사람이 있습니까? 기본적으로 알파벳 문자와 영숫자 문자를 사용해 보았지만 Caps Lock은 괜찮습니다. 다행히도, Caps Lock 키 스트로크를 시뮬레이트하여 LED를 켜고 끌 수 있습니다. 테스트 코드에 어떤 문제가 있는지 알 수 없습니다. 아무도 이것을 경험하지 못했습니까? 명령 아래에OS X에서 CGEventCreateKeyboardEvent로 Caps Lock 키 입력을 시뮬레이트하는 방법
#include <stdio.h>
#include <ApplicationServices/ApplicationServices.h>
main()
{
bool wasCapsLockDown = CGEventSourceKeyState(kCGEventSourceStateHIDSystemState, 57);
if (wasCapsLockDown)
printf("On\n");
else
printf("Off\n");
ProcessSerialNumber psn;
GetFrontProcess(&psn);
CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);//CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
CGEventRef CapsLockDown = CGEventCreateKeyboardEvent(source, (CGKeyCode)57, true);
//CGEventFlags modifiers = 0;
//modifiers |= kCGEventFlagMaskAlphaShift;
//CGEventSetFlags(CapsLockDown, modifiers);
CGEventRef CapsLockUp = CGEventCreateKeyboardEvent(source, (CGKeyCode)57, false);
// simulate capslock down
CGEventPost(kCGHIDEventTap, CapsLockDown);
// simulate capslock up
CGEventPost(kCGHIDEventTap, CapsLockUp);
//CGEventPost(kCGAnnotatedSessionEventTap, CapsLockDown); /* doesn't work */
//CGEventPost(kCGAnnotatedSessionEventTap, CapsLockUp);
//CGEventPost(kCGSessionEventTap, CapsLockDown); /* doesn't work */
//CGEventPost(kCGSessionEventTap, CapsLockUp);
//CGEventPostToPSN(&psn, CapsLockDown); /* doesn't work */
//CGEventPostToPSN(&psn, CapsLockUp);
CFRelease(CapsLockUp);
CFRelease(CapsLockDown);
CFRelease(source);
}
컴파일
gcc test.c -framework ApplicationServices
과 동일 http://stackoverflow.com/q/2334022/236738 – MacGeek