簡體   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