gpt4 book ai didi

objective-c - CGEventSetFlags - 发现本地字符串何时需要 shift 修改键

转载 作者:搜寻专家 更新时间:2023-10-30 20:24:57 26 4
gpt4 key购买 nike

这是我的第一篇文章,如果有任何需要编辑的地方,请告诉我。

我目前有一个函数可以通过向它传递一个字符来返回 Apple 键盘的虚拟键码; 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?

但是那里的解决方案对我没有用,如果有人能帮助我解决我出错的地方,那就太好了!

谢谢,克雷格

最佳答案

对于 future 的搜索者:应该是 (flags | CGEventGetFlags(event)) 而不是 & ... 其他明智的转变仅在已经应用转变时应用。

至于确定何时应按下 shift,您的 keyCodeForChar 函数也应提供该附加信息,类似于 Windows 上的 VkKeyScan()。

关于objective-c - CGEventSetFlags - 发现本地字符串何时需要 shift 修改键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23271257/

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