繁体   English   中英

将键盘快捷方式发送到Mac OS X窗口

[英]Send a keyboard shortcut to a Mac OS X Window

Mac桌面上的一个窗口是否可以以编程方式将键盘快捷键或键序列发送给另一个窗口?

我希望通过使用应用程序的键盘快捷键功能来控制一个不提供API的应用程序。

我很确定这可以在Windows上完成,但Mac?

谢谢

您也可以在不需要AppleScript的情况下执行此操作。 这是一个使用修饰符发送密钥代码的工作代码示例。

-Edit:这不会让你瞄准特定的应用程序,只发布键盘到整个系统(就像在键盘上按下)

#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);  
}

一种方法是在Objective-C应用程序中嵌入Applescript。 例如,执行此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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM