gpt4 book ai didi

macos - 如何在 OSX 上重新映射 CAPSLOCK?

转载 作者:行者123 更新时间:2023-12-03 17:43:21 24 4
gpt4 key购买 nike

CapsLock 似乎是重新映射的两个最棘手的键之一(另一个是电源按钮)。

我可以全局拦截 NSEvent-s:

    _eventTap = CGEventTapCreate( kCGHIDEventTap, 
kCGHeadInsertEventTap,
kCGEventTapOptionDefault,
CGEventMaskBit( kCGEventFlagsChanged ),
(CGEventTapCallBack)_tapCallback,
(__bridge void *)(self));

:

但是,对于每个向上/向下键,我都没有收到事件。实际发生的事情是这样的:

(initial state of CapsLock off)

Key down: NSSystemDefined: 40a00 NSSystemDefined: 40b00 (Green light is on at this point)

Key up: NSSystemDefined: 40b00

Key down: NSSystemDefined: 40a00 (Green light is OFF at this point)

Key up: (nothing)



所以我无法在这个级别映射。

但我想我可以使用 IOKit 在较低级别进行监控,它会检测每个键盘按键按下/按下事件,然后在此级别处理 CAPSLOCK 事件(通过返回 NULL):
- (CGEventRef)processEvent:(CGEventRef)cgEvent
{
NSEvent* event = [NSEvent eventWithCGEvent:cgEvent];

NSUInteger modifiers = [event modifierFlags] &
( NSCommandKeyMask | NSAlternateKeyMask | NSShiftKeyMask | NSControlKeyMask | NSAlphaShiftKeyMask );

NSUInteger flags_changed = _modifiers ^ modifiers;
if( flags_changed & NSAlphaShiftKeyMask )
{
NSLog( @"Eating CAPSLOCK" );
return NULL;
}

_modifiers = modifiers;
:

但是,这并不能阻止 CapsLock 做它的事情(即大写键入的字母)。

我什至尝试从处理程序中的每个键盘事件中删除 CapsLock 修饰符标志:
if( modifiers & NSAlphaShiftKeyMask )
event = [NSEvent keyEventWithType: event.type
location: NSZeroPoint
modifierFlags: event.modifierFlags & ! NSAlphaShiftKeyMask
timestamp: event.timestamp
windowNumber: event.windowNumber
context: event.context
characters: event.characters
charactersIgnoringModifiers: event.charactersIgnoringModifiers
isARepeat: event.isARepeat
keyCode: event.keyCode ];

......但没有运气!

有什么办法可以驯服这个讨厌的 CapsLock 键吗?

编辑: How to simulate Caps Lock keystroke with CGEventCreateKeyboardEvent in OS X

最佳答案

我相信钩环元件 用它自己的键盘驱动程序来做,看看源代码。

关于macos - 如何在 OSX 上重新映射 CAPSLOCK?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30544389/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com