在Mac桌面上,一个窗口能否通过编程的方式向另一个窗口发送键盘快捷键或按键序列?
我想通过使用应用程序的键盘快捷键功能来控制一个没有API的应用程序。
我相当确定这可以在Windows上完成,但是在Mac上呢?
谢谢
在Mac桌面上,一个窗口能否通过编程的方式向另一个窗口发送键盘快捷键或按键序列?
我想通过使用应用程序的键盘快捷键功能来控制一个没有API的应用程序。
我相当确定这可以在Windows上完成,但是在Mac上呢?
谢谢
您可以不使用AppleScript实现这个功能。以下是一个示例工作代码,它可以发送带修饰键的按键代码。
-编辑:这样做不会让您针对特定应用程序进行操作,只能将按键信息发送到整个系统(就像在键盘上按下一样)。
#include <ApplicationServices/ApplicationServices.h>
// you can find key codes in <HIToolbox/Events.h>, for example kVK_ANSI_A is 'A' key
// modifiers are flags such as kCGEventFlagMaskCommand
void PostKeyWithModifiers(CGKeyCode key, CGEventFlags modifiers)
{
CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
CGEventRef keyDown = CGEventCreateKeyboardEvent(source, key, TRUE);
CGEventSetFlags(keyDown, modifiers);
CGEventRef keyUp = CGEventCreateKeyboardEvent(source, key, FALSE);
CGEventPost(kCGAnnotatedSessionEventTap, keyDown);
CGEventPost(kCGAnnotatedSessionEventTap, keyUp);
CFRelease(keyUp);
CFRelease(keyDown);
CFRelease(source);
}
一种方法是将Applescript嵌入到您的Objective-C应用程序中。
例如,执行此apple脚本会发送 Command + M 给 System Events
应用程序:
tell application "System Events" to keystroke "m" using {command down}
您可以像下面这样在您的Cocoa应用程序中嵌入上面的脚本://AppControler.h
#import <Cocoa/Cocoa.h>
@interface AppController : NSObject {
NSAppleScript *key;
}
-(IBAction)sendkeys:(id)sender;
@end
//AppControler.m
#import "AppController.h"
@implementation AppController
-(IBAction)sendkeys:(id)sender
{
NSAppleScript *key = [[NSAppleScript alloc] initWithSource:@"tell application "System Events" to keystroke "m" using {command down}"];
[start executeAndReturnError:nil];
}
@end