【发布时间】:2021-10-24 08:58:23
【问题描述】:
我正在尝试模拟 cmd+v 来粘贴我复制的字符串。 我用下面的代码来模拟:
#define KEY_CODE_x ((CGKeyCode)7)
#define KEY_CODE_c ((CGKeyCode)8)
#define KEY_CODE_v ((CGKeyCode)9)
void PostCommandAndKey(CGKeyCode keyCode)
{
CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
CGEventRef eventDown = CGEventCreateKeyboardEvent(source, keyCode, YES);
CGEventRef eventUp = CGEventCreateKeyboardEvent(source, keyCode, NO);
CGEventSetFlags(eventDown, kCGEventFlagMaskCommand);
CGEventPost(kCGSessionEventTap, eventDown);
CGEventPost(kCGSessionEventTap, eventUp);
CFRelease(eventUp);
CFRelease(eventDown);
CFRelease(source);
}
我是这样调用上述方法的:
- (void) pasteClicked:(id)sender{
NSButton *button = (NSButton *)sender;
PasteItem *pi = self.pasteItems[button.tag];
[self.pasteBoard setString:pi.text forType:NSPasteboardTypeString];
NSString * str = [self.pasteBoard stringForType:NSPasteboardTypeString];
NSLog(@"pasting %@", str);
PostCommandAndKey(KEY_CODE_v);
}
光标位于 pasteClicked: 按钮所在的同一窗口中的 NSTextField 上,但我没有看到任何粘贴的内容。然而,正如我在日志中看到的那样,str 变量得到了正确的值。
我使用的是 OS 11.5.2。
我在这里缺少什么? 任何线索将不胜感激。
【问题讨论】:
-
我都不知道你在什么类下写代码。
-
@ElTomato:所有代码都在AppDelegate中
-
你试过在没有命令键的情况下模拟按键“v”吗?
-
@Willeke:是的,也没有任何反应
-
这是权限问题吗?
标签: objective-c macos cocoa