【问题标题】:Cocoa: Simulate Macbook upper keys & Multimedia keysCocoa:模拟 Macbook 上键和多媒体键
【发布时间】:2012-05-14 14:29:01
【问题描述】:

我正在尝试使用

模拟任何活动应用的 Macbook 上键
CGEventCreateKeyboardEvent (NULL, (CGKeyCode)keycode, true);
CGEventCreateKeyboardEvent (NULL, (CGKeyCode)keycode, false);

到目前为止,我成功找到并发送了前 4 个键的事件:

keycode / Key

107 - Brightness Down
113 - Brightness Up
130 - Mission Control / Expose
160 - Dashboard / Launchpad
 ?? - Keyboard lit Down
 ?? - Keyboard lit Up
 ?? - Previous Track
 ?? - Play/Pause
 ?? - Next Track
 ?? - Mute
 ?? - Volume Down
 ?? - Volume Up
 ?? - Eject

但我找不到任何其他关键代码。 我什至遍历了 1000 个整数,将其数字作为事件发送,似乎没有人工作 =P

那么,有没有办法模拟这些事件?

谢谢

【问题讨论】:

    标签: macos cocoa events simulate


    【解决方案1】:

    由于某种原因,媒体键不被视为正常的键盘事件。 This post 显示事件的样子。

    【讨论】:

    • 非常感谢您指点我的方向。稍作调整后,我工作了!
    【解决方案2】:

    截至 2017/2018 年,部分 API 已更改。在 Swift 中试试这个 sn-p:

    // Simulate illumination up
    let code = NX_KEYTYPE_ILLUMINATION_UP
    let event1 = NSEvent.otherEvent(with: .systemDefined, location: NSPoint.zero, modifierFlags: NSEventModifierFlags(rawValue: 0xa00), timestamp: 0, windowNumber: 0, context: nil, subtype: 8, data1: (Int((code << 16 as Int32) | (0xa << 8 as Int32))), data2: -1)
    event1?.cgEvent?.post(tap: .cghidEventTap)
    let event2 = NSEvent.otherEvent(with: .systemDefined, location: NSPoint.zero, modifierFlags: NSEventModifierFlags(rawValue: 0xb00), timestamp: 0, windowNumber: 0, context: nil, subtype: 8, data1: (Int((code << 16 as Int32) | (0xb << 8 as Int32))), data2: -1)
    event2?.cgEvent?.post(tap: .cghidEventTap)
    
    
    
    // Simulate illumination down
    let code = NX_KEYTYPE_ILLUMINATION_DOWN
    let event1 = NSEvent.otherEvent(with: .systemDefined, location: NSPoint.zero, modifierFlags: NSEventModifierFlags(rawValue: 0xa00), timestamp: 0, windowNumber: 0, context: nil, subtype: 8, data1: (Int((code << 16 as Int32) | (0xa << 8 as Int32))), data2: -1)
    event1?.cgEvent?.post(tap: .cghidEventTap)
    let event2 = NSEvent.otherEvent(with: .systemDefined, location: NSPoint.zero, modifierFlags: NSEventModifierFlags(rawValue: 0xb00), timestamp: 0, windowNumber: 0, context: nil, subtype: 8, data1: (Int((code << 16 as Int32) | (0xb << 8 as Int32))), data2: -1)
    event2?.cgEvent?.post(tap: .cghidEventTap)
    

    (感谢 @Alex293

    这是来自我们的discussion,关于以编程方式控制键盘亮度的方法:https://github.com/pirate/mac-keyboard-brightness

    还有这个答案:How to simulate mac media keys in cocoa

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-05-09
      • 2011-02-27
      • 1970-01-01
      • 2017-07-07
      • 2019-09-14
      • 1970-01-01
      相关资源
      最近更新 更多