【问题标题】:How to go about making app for ipad that makes it into a Mac keyboard [closed]如何为 ipad 制作应用程序,使其成为 Mac 键盘 [关闭]
【发布时间】:2013-02-23 15:03:00
【问题描述】:

我正试图弄清楚如何制作一个具有按钮的应用程序,当按下这些按钮时,我的 mac 会键入某个字符(或修饰符)。我已经按照自己的意愿布置了按钮,所以我的项目现在距离完成只有两步之遥:

  1. 向 mac 发送消息,让它知道要按哪个键。
  2. 让 mac 按实际键 对于 1 我正在考虑设置一个 bonjour 服务,该服务将与在 ipad 上按下的键相关联的字符串发送到 mac。然后mac会收到这个。我键盘上的一些键是需要移位的字符(即@),所以我想这个代码将类似于 S120。接收到消息的任何人都会读取字符串,看到它需要刺激 shift 按下与 120 关联的键。 对于 2,我的想法较少。请记住,这需要快速,因为它将是键盘。我正在考虑制作一个 iokit 项目,该项目将接收字符串解码并模拟正确的密钥。不过这可能有点过头了,而且我听说在处理内核时你真的必须小心。如果我的想法不正确,请提出更好的方法并填写详细信息。谢谢!

【问题讨论】:

  • 这确实是两个问题,但是iOS设备和Mac之间的通信是你可以单独研究的,例如stackoverflow.com/questions/7127832/…
  • 你提供的那个链接很有帮助,但听起来太慢了,而且过分了

标签: macos ipad keyboard bonjour iokit


【解决方案1】:

至于模拟按键,使用 Applescript 有一个简单的方法。

tell application "System Events"
    keystroke "A"
end tell

(您可能需要在 Accessibility prefpane 中“启用辅助设备的访问权限”)。

或者,可以在命令行上运行相同的脚本

osascript -e 'tell app "System Events" to keystroke "a"' 

编辑:如果您担心速度,脚本桥可以提供帮助。

#import <Foundation/Foundation.h>
#import <ScriptingBridge/ScriptingBridge.h>

int main(int argc, char *argv[]) {
    @autoreleasepool {  
        id sysEvents = [SBApplication applicationWithBundleIdentifier: @"com.apple.systemevents"];

        [sysEvents keystroke: @"h" using: 'Ksft'];
        [sysEvents keystroke: @"e" using: 0];
        [sysEvents keystroke: @"l" using: 0];
        [sysEvents keystroke: @"l" using: 0];
        [sysEvents keystroke: @"o" using: 0];

        // keyCode might be more suitable for your purposes

        for (int i = 32; i < 64; i++) 
        {
            [sysEvents keyCode: i using: 0];    
        }
    }
}

您可以使用此应用程序找到关键代码。

http://manytricks.com/keycodes/

【讨论】:

  • @JoerickYes 但根据我的经验,applescriot 太慢了。然后是让它知道要模拟哪个键的问题......
  • 我已经编辑了帖子并提出了关于速度的建议
  • 网桥有什么帮助?还有循环的键码是如何工作的
  • 做一些研究。在 Google 上查找脚本桥。
【解决方案2】:

您可能需要 Quartz 事件服务中的 CGEventCreateKeyboardEvent() function 或类似名称。

【讨论】:

    猜你喜欢
    • 2014-07-31
    • 1970-01-01
    • 2016-09-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 2012-09-02
    • 2011-03-21
    • 1970-01-01
    相关资源
    最近更新 更多