gpt4 book ai didi

objective-c - 以编程方式禁用鼠标和键盘

转载 作者:太空狗 更新时间:2023-10-30 03:52:52 24 4
gpt4 key购买 nike

我想在 Mac 上以编程方式暂时禁用鼠标和键盘输入(使用 Objective C/C/Unix),然后重新启用它们。

最佳答案

我制作了一个小型开源应用程序,允许您使用 OS X 中的 CGEventTap 函数有选择地禁用键盘。它位于 Carbon Framework 中,但基于 CoreFoundation,因此它也适用于狮子。作为示例,您可以尝试打开我的 SourceApp MultiLayout, available here on GitHub .

如果您想自己做,基本上您需要做的是:

要使用它,您需要添加 Carbon 框架:

#import <Carbon/Carbon.h>

然后像这样创建一个事件点击:

void tap_keyboard(void) {
CFRunLoopSourceRef runLoopSource;

CGEventMask mask = kCGEventMaskForAllEvents;
//CGEventMask mask = CGEventMaskBit(kCGEventKeyUp) | CGEventMaskBit(kCGEventKeyDown);

CFMachPortRef eventTap = CGEventTapCreate(kCGHIDEventTap, kCGHeadInsertEventTap, kCGEventTapOptionDefault, mask, myCGEventCallback, NULL);

if (!eventTap) {
NSLog(@"Couldn't create event tap!");
exit(1);
}

runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0);

CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);

CGEventTapEnable(eventTap, true);

CFRelease(eventTap);
CFRelease(runLoopSource);

}

要在必要时中断事件,请使用此代码段:

bool dontForwardTap = false;

CGEventRef myCGEventCallback(CGEventTapProxy proxy, CGEventType type, CGEventRef event, void *refcon) {


//NSLog(@"Event Tap: %d", (int) CGEventGetIntegerValueField(event, kCGKeyboardEventKeycode));

if (dontForwardTap)
return nil;
else
return event;
}

只需将 bool 值 dontForwardTap 设置为 true,事件就会停止。

关于objective-c - 以编程方式禁用鼠标和键盘,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6776660/

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