如何在osx中​​创建虚拟键盘?

2023-12-29

我想在 osx 中创建一个虚拟键盘。是否可以?我的意思是我可以制作一个程序来提供与真实键盘相同的信号吗?这种键盘的示例是屏幕键盘或键盘查看器(顺便说一句,它是否有必要的界面)。

我应该从多低开始?我应该制作一个设备驱动程序吗?虚拟(无线)键盘?或者可可等有必要的东西吗?

我的要求是:
- 元组列表(时间、key_down/key_up、key_code)对应于输入的人
- 虚拟键盘应与真实键盘并排工作(如触摸板和蓝牙鼠标)
- 这应该适用于每个程序。我能找到的最难的例子是:终端+vim、远程桌面、星际争霸等游戏

非常欢迎示例代码和链接。

edit:要点是能够以编程方式访问击键。有类似的程序,但它们是闭源的(例如http://www.assistiveware.com/keyrinkles.php http://www.assistiveware.com/keystrokes.php)。我想知道制作此类程序的最佳方法是什么。

edit 2:现在我开始了这个聚会。下面是一个复制-编辑-粘贴-尝试-其他代码,基本上包括制作虚拟键盘的所有必要部分。在这种情况下,每次我按“a”时,虚拟键盘都会按“z”。有一个错误,添加了多个“z”...

#import <ApplicationServices/ApplicationServices.h>

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

    UniChar unicodeString[101];
    UniCharCount unicharCount; 
    char chars[2];
    int i,j,charsLen;

    CGEventRef zDown;
    CGEventRef zUp;
    zDown = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)6, true);
    zUp = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)6, false);

    //printf("%u %u\n", (uint32_t)type, (uint32_t) event);

    CGEventKeyboardGetUnicodeString(event, 100, &unicharCount, unicodeString);

    for (i=0; i < unicharCount; i++)
    {
        if (unicodeString[i] > 127) {
            chars[0] = (unicodeString[i] >> 8) & (1 << 8) - 1;
            chars[1] = unicodeString[i] & (1 << 8) - 1; 
            charsLen = 2;
        } else {
            charsLen = 1;
            chars[0] = unicodeString[i];
        }
        //for (j = 0; j < charsLen; j++) printf("%c", chars[j]);
    }

    if (chars[0] == 'a')
    {
        CGEventPost(kCGHIDEventTap, zDown);
        CGEventPost(kCGHIDEventTap, zUp);
    }

    return event; 
}

int main (int argc, const char * argv[]) {
    CFMachPortRef eventTap;  
    CFRunLoopSourceRef runLoopSource; 

    eventTap = CGEventTapCreate(kCGSessionEventTap, kCGHeadInsertEventTap, 0, kCGEventMaskForAllEvents, myCGEventCallback, NULL);
    runLoopSource = CFMachPortCreateRunLoopSource(kCFAllocatorDefault, eventTap, 0);
    CFRunLoopAddSource(CFRunLoopGetCurrent(), runLoopSource, kCFRunLoopCommonModes);
    CGEventTapEnable(eventTap, true);
    CFRunLoopRun();

    return 0;
}

br,
Juha


你可以使用以下方法来做到这一点石英事件水龙头 http://developer.apple.com/library/mac/#documentation/Carbon/Reference/QuartzEventServicesRef/Reference/reference.html,它提供了:

...用于事件点击的 C API,它们是 用于观察和改变的过滤器 低级用户输入事件流 在 Mac OS X 中

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在osx中​​创建虚拟键盘? 的相关文章

随机推荐

  • 为什么 08 在 Java 中不是有效的整数文字?

    Why is 08被认为是超出范围的 int 但07而下面不是吗 在 Java 和其他几种语言中 以0被解释为八进制 基数为 8 数量 对于个位数 除08 and 09 这是不允许的 结果是相同的 所以您可能没有注意到它们被解释为八进制 但
  • 为什么我会收到“不兼容的类型:对象无法转换为字符串”?

    我正在尝试使用最简单的代码从 Android 应用程序调用 Web API REST 方法 以及我找到的代码here http www speakingcode com 2012 09 10 how to consume data from
  • 读取 R 中的有向图

    我在阅读 创建有向图时遇到问题 我按照我找到的步骤进行操作here http www ats ucla edu stat r faq snplot htm 这是我的文本文件图 txt 1 2 1 3 2 5 3 4 3 5 4 5 5 6
  • 如何仅在赋值时实现嵌套字典的自动生存?

    TL DR 在为子键分配值时 如何让超级键在 Python 字典中自动激活 而不在检查子键时也让它们自动激活 背景 通常在Python中 在嵌套字典中设置值需要在分配给子键之前手动确保更高级别的键存在 那是 my dict 1 2 3 如果
  • 在 SuiteScript 中设置国家/地区

    我需要从销售订单上的自定义字段设置采购订单上的发货国家 地区 根据 NS 文档 记录浏览器 该字段是文本 但在 UI 中显然它是一个下拉菜单 在架构浏览器中 它引用国家 地区列表 其中值为 unitedStates 等 我尝试将其设置为 U
  • 如何实现CSS边框角倒角而不是圆角?

    通过CSSborder radius属性我可以在末尾有一个弯曲的圆角边框 boxLeft border right 1px dashed 333 border bottom 1px dashed 333 border radius 0 0
  • 删除 YouTube 观看稍后播放列表项目失败 - 返回 404

    我有代码可以从我的 youtube watch Later 播放列表中删除一个项目 大约两周前 这一切都正常 现在我从 YouTube 收到 404 错误 这是请求和响应的序列 当然 身份验证详细信息已被删除 获取播放列表项请求 GET 获
  • Angular 2 如何模糊按钮返回时的输入?

    如何模糊input按本机键盘返回button在移动 例如
  • XCode 4.2 版本检查器隐藏情节提要

    我不确定其他人是否遇到这个问题 但是当我单击 XCode 中的 版本编辑器 按钮时 我的 Storyboard 切换到 XML 视图 并且我不知道如何恢复可视化编辑器 有人可以帮忙吗 我真的希望这只是深夜编码困倦的结果 提前致谢 右键单击
  • AddressBook:如何获取不同 Exchange 源的名称

    我想要获取我的 iPhone 同步到的所有 Exchange 源的名称 例如如果我使用 ActiveSync Exchange 将我的设备同步到 Gmail 和 Hotmail 帐户 在本机联系人中 我可以根据我设置的不同帐户看到不同的部分
  • 是否有涵盖 iPhone、Android、WebOS 和 Blackberry OS 的 jQ Touch 等效产品?

    我即将开始使用 HTML5 CSS3 和 JavaScript 为最新的智能手机编写一个 Web 应用程序 我需要的不是框架 而是像 jQuery 这样的库 我研究了 jQTouch 它非常适合 iPhone 显然也支持 Android 但
  • JBoss JAAS 自定义登录模块

    我正在尝试使用自定义JAAS托管的基于 Web 的应用程序的身份验证模块JBoss 5 1 0 GA 所以一切似乎都工作正常 直到用户数量增加并且会话 它认为 开始变得混合 我使用自定义 JAAS 的原因是因为自定义身份验证后端以及需要传回
  • PHP 5 反射 API 性能

    我目前正在考虑在我自己的 MVC Web 框架中使用 Reflection 类 主要是 ReflectionClass 和 ReflectionMethod 因为我需要自动实例化控制器类并调用它们的方法 而无需任何所需的配置 约定优于配置
  • Telegram 机器人键盘通过 JSON 发送

    我正在使用 MS Bot 框架 我想向用户发送自定义键盘 因此我尝试使用以下 JSON 回复消息 public async Task
  • Django 查询集上的 Count() 与 len()

    在 Django 中 鉴于我有QuerySet我要迭代并打印结果 计算对象的最佳选择是什么 len qs or qs count 另外考虑到在同一迭代中计算对象也不是一种选择 虽然Django 文档 https docs djangopro
  • 如何在 Django 中实现 Northwind

    我正在尝试使用 Django admin 在 MySQL 中实现 Northwind 数据库模型来显示数据 有人知道如何从原始模型中 干净 地做到这一点吗 是否有任何功能实现可供下载 模型 管理 接下来是完全未经尝试的程序 不确定你所说的
  • 实体框架 6 Code First int Identity 列值第一行为零

    首次执行 update database 命令以使用种子数据填充数据库后 发现所有 int Id 列均以零 0 开头 而不是预期的一 1 在 Configuration cs 中的 Seed 方法顶部为每个实体 表添加了以下 2 行代码 注
  • 如何使用 VBA 将“整个”DAO 记录集插入表中

    我有一个 DAO 记录集 可以很好地创建 我可以将记录从该集传输到表中 这是逐行完成的并且效果很好 但是我一次传输大量数据 因此这可能需要很长时间一行一行 有没有一种方法可以一次性传输整个记录集 而不是逐行传输 请参阅下面的当前使用的代码
  • GitKraken 不允许我在 GitLab 上打开我的私有存储库

    所以 除了GitKraken 不允许我从 GitHub 上的私人存储库进行克隆 https stackoverflow com questions 41945280 gitkraken wont let me clone from a pr
  • 如何在osx中​​创建虚拟键盘?

    我想在 osx 中创建一个虚拟键盘 是否可以 我的意思是我可以制作一个程序来提供与真实键盘相同的信号吗 这种键盘的示例是屏幕键盘或键盘查看器 顺便说一句 它是否有必要的界面 我应该从多低开始 我应该制作一个设备驱动程序吗 虚拟 无线 键盘