2012-02-16 15 views
6

मैक ओएस/कोको में के लिए कीबोर्ड की घटनाओं उत्पन्न करें, मैं कीबोर्ड प्रविष्टि संश्लेषण कर सकते हैं - तार - एक पारदर्शी तरीके से frontmost आवेदन के लिए?frontmost आवेदन

अधिक सटीक होने के लिए, मैं विशेष वर्ण या नियंत्रण अनुक्रम नहीं भेजना चाहता हूं। मेरी केवल आवश्यकता है मानक वर्ण भेजें।

बस here सीखा है, कि AppleScript इस तरह चाल कर सकते हैं:

tell application "TextEdit" 
    activate 

    tell application "System Events" 
     keystroke "f" using {command down} 
    end tell 
end tell 

प्रश्न: मैं इस का उपयोग कर ObjC/कोको कैसे करना होगा?

अद्यतन 2012-02-18 - Nicks प्रस्ताव बढ़ाया

Nick के नीचे दिए गए कोड के आधार पर, यहाँ अंतिम समाधान है:

// First, get the PSN of the currently front app 
ProcessSerialNumber psn; 
GetFrontProcess(&psn); 

// make some key events 
CGEventRef keyup, keydown; 
keydown = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)6, true); 
keyup = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)6, false); 

// forward them to the frontmost app 
CGEventPostToPSN (&psn, keydown); 
CGEventPostToPSN (&psn, keyup); 

// and finally behave friendly 
CFRelease(keydown); 
CFRelease(keyup); 

इस विधि का उपयोग करना, एक पर एक क्लिक एक गैर-सक्रिय पैनल का बटन ईवेंट को वास्तविक फ्रंट एप्लिकेशन पर लक्षित करता है। पूरी तरह से मैं क्या करना चाहता हूँ।

उत्तर

10

ज़रूर, आप CGEventCreateKeyboardEvent उपयोग करने के लिए कीबोर्ड की घटनाओं को बनाने के लिए, तो उन्हें इस तरह के रूप में पोस्ट चाहता हूँ:

CGEventRef keyup, keydown; 
    keydown = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)56, true); 
    keyup = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)56, false); 

    CGEventPost(kCGHIDEventTap, keydown); 
    CGEventPost(kCGHIDEventTap, keyup); 
    CFRelease(keydown); 
    CFRelease(keyup); 

यह थोड़ा अधिक AppleScript से जटिल है, लेकिन यह काम कर देता है। आप को स्पष्ट रूप से एक कुंजीपटल पोस्ट करना होगा और फिर एक कुंजीपटल ईवेंट करना होगा। Quartz Event Services Reference पर अधिक जानकारी।

+0

धन्यवाद! इतने कम स्तर पर कभी भी कुछ नहीं किया। – SteAp