Tag: keycode

如何将ASCII字符转换为CGKeyCode?

我需要一个函数,给定一个字符,返回与当前键盘布局上该字符位置相关联的CGKeyCode 。 例如,给定“b”,如果使用US QWERTY,它应该返回kVK_ANSI_B kVK_ANSI_N如果使用Dvorak,则返回kVK_ANSI_B 。 为此,Win32 API具有函数VkKeyScan() 。 X11具有函数XStringToKeySym() 。 在CG API中有这样一个函数吗? 我需要这个为了传递一个参数到CGEventCreateKeyboardEvent() 。 我已经尝试使用CGEventKeyboardSetUnicodeString()来代替,但显然不支持修饰符标志(我需要)。 我已经广泛search这个,但找不到一个体面的答案。 目前我正在使用下面的代码( 可以在线find ),它可以工作,但并不完美(而且很难破译如何简化),我不想在生产代码中使用它: #include <stdint.h> #include <stdio.h> #include <ApplicationServices/ApplicationServices.h> CGKeyCode keyCodeForCharWithLayout(const char c, const UCKeyboardLayout *uchrHeader); CGKeyCode keyCodeForChar(const char c) { CFDataRef currentLayoutData; TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource(); if (currentKeyboard == NULL) { fputs("Could not find keyboard layout\n", stderr); […]