2011-01-16 4 views
8

Mac 바탕 화면의 한 창에서 키보드 단축키 또는 키 시퀀스를 다른 컴퓨터로 프로그래밍 방식으로 보낼 수 있습니까?Mac OS X 창에 키보드 단축키 보내기

저는 응용 프로그램의 키보드 단축키 기능을 사용하여 API를 제공하지 않는 응용 프로그램을 제어하려고합니다.

Windows에서이 작업을 수행 할 수 있다고 확신합니까?

감사

이 작업을 수행하는

답변

13

한 가지 방법은 목표 - C 응용 프로그램에서 AppleScript를 임베딩된다. 이 애플 스크립트를 실행 예를 들어, 전송 명령 + M 응용 프로그램 System Events에 :

//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 
+0

완벽하지 않습니다. 누구든지 이걸 보면서 애플 스크립트에 관한 사과 문서가 유용 해 보입니다. http://developer.apple.com/library/mac/#documentation/AppleScript/Conceptual/AppleScriptLangGuide/introduction/ASLR_intro.html. 고마워요. – Adam

15

당신에게 :이 같은 뭔가 코코아 응용 프로그램에서 스크립트를 위에 포함 할 수 있습니다

tell application "System Events" to keystroke "m" using {command down} 

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); 
} 
+1

좋은 생각이긴하지만 OP가이를 어떻게 별도의 대상 프로세스로 보냅니 까? – BigBrother

+0

왜 NX_KEYTYPE_PLAY에서 작동하지 않습니까? 그냥 "y" – jLynx