显示系统键盘Mac应用程序?

时间:2010-10-05 01:12:44

标签: cocoa macos

如果在我的应用中选择了任何文本输入字段,我需要显示系统键盘。我似乎找不到任何关于如何做到这一点的资源。有什么提示吗?

编辑:我问这个问题,因为我正在制作一个全屏应用程序,需要根据用户选择显示/隐藏。

谢谢,
Teja公司

1 个答案:

答案 0 :(得分:2)

你无法找到信息的原因是它是一个C API而且它不在Cocoa中。您需要使用的API是Text Input Sources Services。试试这个样本:

#import <Foundation/Foundation.h>
#import <Carbon/Carbon.h>

int main(){
    NSAutoreleasePool*pool=[[NSAutoreleasePool alloc] init];
    NSDictionary*property=[NSDictionary dictionaryWithObject:(NSString*)kTISTypeKeyboardViewer
                                                      forKey:(NSString*)kTISPropertyInputSourceType];
    NSArray*tisArray=(NSArray*)TISCreateInputSourceList((CFDictionaryRef)property,NO);
    // tisArray usually only contains just one keyboard viewer
    // in a rare case the user might have another viewer installed, beware
    TISInputSourceRef keyboardViewer=(TISInputSourceRef)[tisArray objectAtIndex:0];
    TISSelectInputSource(keyboardViewer);
    CFRelease((CFTypeRef)tisArray);
    [pool drain];
    return 0;
}

这是一个Core Foundation类型的API,所以如果你知道Cocoa的用法是相似的; Core Foundation基本上是NSObject的C API。大多数情况下,您可以使用免费桥接,请参阅this SO question。在垃圾收集环境中保留/释放它们时需要小心。 TIS在10.5中引入;我不知道为什么Apple当时没有将它作为Cocoa API引入。 显然他们还没有下定决心处理64位碳。