【发布时间】:2014-09-24 18:57:15
【问题描述】:
有谁知道如何检测用户何时更改 OSX 中的当前输入源?
我可以致电TISCopyCurrentKeyboardInputSource() 来了解正在使用的输入源 ID,如下所示:
TISInputSourceRef isource = TISCopyCurrentKeyboardInputSource();
if ( isource == NULL )
{
cerr << "Couldn't get the current input source\n.";
return -1;
}
CFStringRef id = (CFStringRef)TISGetInputSourceProperty(
isource,
kTISPropertyInputSourceID);
CFRelease(isource);
如果我的输入源是“德语”,那么 id 最终会是“com.apple.keylayout.German”,这主要是我想要的。除了:
- 我的进程启动后
TISCopyCurrentKeyboardInputSource()的结果不会改变吗?特别是,我可以在循环中调用TISCopyCurrentKeyboardInputSource()并切换我的输入源,但TISCopyCurrentKeyboardInputSource()不断返回我的进程开始时使用的输入源。 - 我真的很想在输入源更改时收到通知。有没有办法做到这一点?要获得通知或某种事件告诉我输入源已更改?
【问题讨论】:
标签: macos cocoa keyboard macos-carbon