我需要在OSX中模拟击键.我是这样做的:
-(void)execute {
CGEventSourceRef sourceRef =
CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
CGEventRef keyPress = CGEventCreateKeyboardEvent (sourceRef, (CGKeyCode)keyCode, true);
CGEventRef keyUnpress = CGEventCreateKeyboardEvent (sourceRef, (CGKeyCode)keyCode, false);
CGEventSetFlags(keyPress, modifierFlags);
CGEventPost(kCGHIDEventTap, keyPress);
//unpressing the acualkey
CGEventPost(kCGHIDEventTap, keyUnpress);
CFRelease(keyPress);
CFRelease(keyUnpress);
CFRelease(sourceRef);
}
Run Code Online (Sandbox Code Playgroud)
它适用于任何应用程序中的每个热键或简单击键,但不适用于系统范围的快捷方式,例如option + space启动Spotlight或cmd + shift + 4制作屏幕截图或ctrl + `打开iTerm2窗口.
我试图改变事件的来源和发布事件的位置,但没有帮助.有任何想法吗?
我需要在Windows,Mac和Linux上自动化桌面应用程序(不是Web浏览器)测试.在Windows上我使用SendKeys,我在Mac和Linux上使用什么?我是否可以从xUnit中优先使用任何跨平台的.NET Core SendKeys实现?
我正在 Mac 上构建一个 swiftUI 应用程序,我想知道是否有一种方法可以在应用程序运行时或在后台模拟键盘快捷键。我使用此应用程序的目标是当我的服务器向我发送相应的手势信息时调用快捷方式。我正在考虑使用,NSEvent.addGlobalMonitorForEvents(matching: .keyDown, handler: self.handler)但我认为这更多的是重新编程快捷方式,而不仅仅是调用它们。
例如,如果我的服务器向我发送一个显示“粘贴”的字符串,那么无论我在哪个屏幕上,只要我的应用程序正在运行,我将如何调用命令粘贴快捷方式。任何帮助或信息将不胜感激!