gpt4 book ai didi

objective-c - 如何在 Objective-C 中将击键发送到另一个进程

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

我知道这里有一些关于此的问题,但我有这个类方法将击键发送到另一个进程,但它似乎部分工作。如果我发送@“mystring”的 NSString,我会返回“mmmmmmmm”(即始终是第一个字母乘以原始字符串的长度倍)。这是我的代码,请有人告诉我我缺少什么。顺便说一下,字符的 NSLog 显示了缓冲区变量中的正确字符。我看过的其他问题1.CGEventCreateKeyboardEvent and CGEventTapLocation2.-CGEventPostToPSN - How to send keys with different keyboard locales?

+(void)writeString:(NSString *)valueToSet withFlags:(int)flags intoProcess:(ProcessSerialNumberPtr) process 
{

CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStatePrivate);
CGEventRef keyEventDown = CGEventCreateKeyboardEvent(source, 1, true);
CGEventRef keyEventUp = CGEventCreateKeyboardEvent(source, 1, false);
CGEventSetFlags(keyEventDown,0);
CGEventSetFlags(keyEventUp,0);
UniChar buffer;
CFRelease(source);
for (int i = 0; i < [valueToSet length]; i++) {
buffer = [valueToSet characterAtIndex:i];
NSLog(@" %i place Character: %c",i,buffer);
CGEventKeyboardSetUnicodeString(keyEventDown, 1, &buffer);
CGEventKeyboardSetUnicodeString(keyEventUp, 1, &buffer);

CGEventSetFlags(keyEventDown,flags);
CGEventPostToPSN(process, keyEventDown);
[NSThread sleepForTimeInterval: 0.01];
CGEventSetFlags(keyEventUp,flags);
CGEventPostToPSN(process, keyEventUp);
[NSThread sleepForTimeInterval: 0.01];

}
CFRelease(keyEventUp);
CFRelease(keyEventDown);
}

最佳答案

您是否在代码中的其他位置(同一线程上)设置了事件点击?如果是,则可能会发生以下情况:

您发布了一个事件,但应该处理它们并通过事件链发送它们的线程被阻塞。因此基本上您可以同时发送事件并阻止它们。如果是这种情况,您应该使用计时器并逐个发送事件,以允许您的事件点击处理您刚刚发送的相同事件。

关于objective-c - 如何在 Objective-C 中将击键发送到另一个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10630299/

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