You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Swift 5.5基于IOKit实现按键重映射及相关API问询

问题解答

可行性说明

Swift 5.5及以上版本完全可以实现相同的A、B按键互换的重映射效果,Swift对IOKit的C语言API桥接支持完善,无需额外依赖第三方组件。

改写后的Swift版本代码

首先需要在Xcode项目中创建Objective-C桥接头文件(.h)并导入依赖的头文件,内容如下:

#import <IOKit/hidsystem/IOHIDEventSystemClient.h>
#import <IOKit/hidsystem/IOHIDServiceClient.h>
#import <IOKit/hid/IOHIDUsageTables.h>

Swift实现代码:

import Foundation

func swapABKeyRemap() {
    let aKey: UInt64 = 0x700000004
    let bKey: UInt64 = 0x700000005
    
    // 构建按键映射规则
    let keyMap = [
        [kIOHIDKeyboardModifierMappingSrcKey as String: aKey,
         kIOHIDKeyboardModifierMappingDstKey as String: bKey],
        [kIOHIDKeyboardModifierMappingSrcKey as String: bKey,
         kIOHIDKeyboardModifierMappingDstKey as String: aKey]
    ] as [[String: UInt64]]
    
    // 创建HID事件系统客户端
    guard let systemClient = IOHIDEventSystemClientCreateSimpleClient(kCFAllocatorDefault) else { return }
    guard let serviceList = IOHIDEventSystemClientCopyServices(systemClient) as? [IOHIDServiceClient] else {
        CFRelease(systemClient)
        return
    }
    
    // 匹配所有键盘设备应用映射规则
    for service in serviceList {
        if IOHIDServiceClientConformsTo(service, kHIDPage_GenericDesktop, kHIDUsage_GD_Keyboard) {
            IOHIDServiceClientSetProperty(service, kIOHIDUserKeyUsageMapKey as CFString, keyMap as CFArray)
        }
    }
    
    CFRelease(serviceList)
    CFRelease(systemClient)
}

// 执行映射
swapABKeyRemap()

*注意:运行该代码的应用需要提前在「系统设置>隐私与安全性>辅助功能」中开启辅助功能权限,否则映射规则不会生效。

适配Swift的现代API说明

目前苹果官方没有推出比IOKit HID更现代的原生Swift API,按键重映射这类底层硬件交互逻辑仍然依赖IOKit框架实现。如果需要更符合Swift语法习惯的调用方式,可以使用第三方开源的IOKit Swift封装库,无需手动处理C API桥接,类型安全性更高。

内容的提问来源于stack exchange,提问作者Tzar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 05:36:06