Macos 如何在OS X中使用CGEventCreateKeyboardEvent模拟Caps Lock击键
有没有人在OSX上用CGEventCreateKeyboardEvent模拟Caps Lock击键?基本上我试过字母字符和字母数字字符,但大写字母会锁定。希望我能模拟Caps Lock按键来打开/关闭LED。我不知道我的测试代码有什么问题。有人对此有经验吗Macos 如何在OS X中使用CGEventCreateKeyboardEvent模拟Caps Lock击键,macos,keyboard-events,capslock,Macos,Keyboard Events,Capslock,有没有人在OSX上用CGEventCreateKeyboardEvent模拟Caps Lock击键?基本上我试过字母字符和字母数字字符,但大写字母会锁定。希望我能模拟Caps Lock按键来打开/关闭LED。我不知道我的测试代码有什么问题。有人对此有经验吗 #include <stdio.h> #include <ApplicationServices/ApplicationServices.h> main() { bool wasCapsLockDown =
#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);
}
您是否需要切换caps lock状态,或者仅仅打开/关闭LED就足够了?如果只是LED,则以下是一些示例代码:
请注意,它根本不涉及CGEvent——它使用IOKit魔术直接干扰键盘指示灯。哈哈!这可能只是一个经典。。您的代码退出是因为它确实能够做任何事情。添加一些
睡眠(秒)
。另外,请尝试在向下和向上事件之间设置一个小延迟(usleep(微秒)
)。基本上,我希望可以更改caps lock状态并同时打开/关闭LED。我已经试过了你的示例代码。但我发现了一个问题。它仅在调用此示例代码的应用程序中可用。当我切换到其他应用程序时,caps lock LED将与键盘输入异步。希望我想知道是否有任何方法可以在osx中实现这一点。无论如何,提前感谢您的回答。与此相同,在MacOSX 10.11.6 El Capitan中不起作用,编译时会发出警告:“GetFrontProcess”已弃用,并正确报告Caps Lock状态,但无法切换。
gcc test.c -framework ApplicationServices