gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 17:16:38 27 4
gpt4 key购买 nike

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

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

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

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

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

编辑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,
尤哈

最佳答案

您可以使用Quartz Event Taps来做到这一点,它提供了:

...C API for event taps, which are filters used to observe and alter the stream of low-level user input events in Mac OS X

关于cocoa - 如何在osx中​​创建虚拟键盘?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4512106/

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