【发布时间】:2014-06-09 21:03:39
【问题描述】:
这是我的第一篇文章,如果有任何需要编辑的地方,请告诉我。
我目前有一个函数,它通过传递一个字符来返回苹果键盘的虚拟键代码; CGKeyCode keyCodeForChar(),它有效,我已经对照各种网络资源检查了结果。
诸如NSString *myString = @"Hello World!" 之类的本地字符串被分解并处理每个字符,检索CGKeyCode 并尝试使用CGEventPost() 写入。这是可行的,但是在我尝试检测何时应将字母大写的正确标志时,整个字符串都以小写形式打印出来。到目前为止,这是我的代码:
NSString *myString = @"Hello World!";
if (![self.view.window isKeyWindow])
{
for (int i = 0; i < myString.length; i++)
{
char c = [theString characterAtIndex:i];
CGKeyCode keyCode = keyCodeForChar(c);
CGEventRef event;
CGEventFlags flags = kCGEventFlagMaskShift;
CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
// Key down event
event = CGEventCreateKeyboardEvent(source, keyCode, true);
CGEventSetFlags(event, (flags & CGEventGetFlags(event)));
CGEventPost(kCGHIDEventTap, event);
CFRelease(event);
// Key up event
event = CGEventCreateKeyboardEvent(source, keyCode, false);
CGEventSetFlags(event, (flags & CGEventGetFlags(event)));
CGEventPost(kCGHIDEventTap, event);
CFRelease(event);
CFRelease(source);
}
}
当前输出为hello world1,1 来自与“!”相同的CGKeyCode。因此,我相信我检测到正确的标志掩码是错误的。我看过这里提出的类似问题,例如:
Obtaining modifier key pressed in CGEvent tap
CGEventPost - possible bug when simulating keyboard events?
但是那里的解决方案对我没有用,如果有人可以帮助我解决我哪里出错了,那就太好了!
谢谢你, 克雷格
【问题讨论】:
标签: objective-c macos cocoa quartz-graphics keyboard-events