我正在使用CGEventCreateKeyboardEvent并需要知道CGKeyCode要使用的值.
具体来说,我是关键的密钥代码Command.文档提供了其他键的示例:zis 6,shiftis 56.
某处必须有Mac虚拟键码列表?
我正在编写一个应用程序,我需要在Mac上模拟按键事件,给出代表每个键的代码.看来我需要使用该CGEventCreateKeyboardEvent函数来创建事件.问题是这个功能需要Mac键码,而我所拥有的是代表特定键的代码.所以,例如,我收到:
KEY_CODE_SHIFT或者KEY_CODE_A- 这些都是在某处定义的数字常量.
我需要采用这些常量并将它们转换为CGKeyCode值.
我当前的尝试使用类似于这个SO问题的代码.问题是它只适用于可打印字符.如果所有其他方法都失败了,我就不会对转换进行硬编码,但这意味着我需要一个可能的CGKeyCode值表,这是我还没有找到的.
有任何想法吗?
Mac桌面上的一个窗口是否可以以编程方式将键盘快捷键或键序列发送给另一个窗口?
我希望通过使用应用程序的键盘快捷键功能来控制一个不提供API的应用程序.
我很确定这可以在Windows上完成,但Mac?
谢谢
我有一些代码,我一直用来获取当前的键盘布局,并将虚拟键码转换为字符串.这在大多数情况下效果很好,但我在某些特定情况下遇到了麻烦.引起这种情况的是德国QWERTZ键盘上退格键旁边的重音键.http://en.wikipedia.org/wiki/File:KB_Germany.svg
该密钥生成我期望的VK代码,kVK_ANSI_Equal但在使用QWERTZ键盘布局时,我没有得到任何描述.它最终成为死键,因为它应该由另一个键组成.有没有办法捕捉这些情况并进行适当的转换?
我目前的代码如下.
TISInputSourceRef currentKeyboard = TISCopyCurrentKeyboardInputSource();
CFDataRef uchr = (CFDataRef)TISGetInputSourceProperty(currentKeyboard, kTISPropertyUnicodeKeyLayoutData);
const UCKeyboardLayout *keyboardLayout = (const UCKeyboardLayout*)CFDataGetBytePtr(uchr);
if(keyboardLayout)
{
UInt32 deadKeyState = 0;
UniCharCount maxStringLength = 255;
UniCharCount actualStringLength = 0;
UniChar unicodeString[maxStringLength];
OSStatus status = UCKeyTranslate(keyboardLayout,
keyCode, kUCKeyActionDown, 0,
LMGetKbdType(), kUCKeyTranslateNoDeadKeysBit,
&deadKeyState,
maxStringLength,
&actualStringLength, unicodeString);
if(actualStringLength > 0 && status == noErr)
return [[NSString stringWithCharacters:unicodeString length:(NSInteger)actualStringLength] uppercaseString];
}
Run Code Online (Sandbox Code Playgroud) 如何将密钥代码转换为kVK_ANSI_1我可以传递给的字符串setKeyEquivalent(所以kVK_ANSI_1,我会得到@"1")?为什么有两种方法来指定键呢?只有一个表示更有意义.
如何将字符(或一个字母NSString)转换为使用当前选定的可可或碳键盘布局生成它的相应键代码?
macos ×6
cocoa ×4
keyboard ×3
macos-carbon ×3
objective-c ×3
cgkeycode ×2
c++ ×1
keycode ×1
localization ×1
xcode ×1