C言語のプログラムからInput Methodの状態を取得したいのですが,

#include <Carbon/Carbon.h>
int test() {
TISInputSourceRef is = TISCopyCurrentKeyboardInputSource();
CFBooleanRef ret = TISGetInputSourceProperty(is,
kTISPropertyInputSourceIsASCIICapable);
return CFBooleanGetValue(ret);
}

のように書くと,初回の呼び出しは期待通りに動作するものの,
同一のプログラムからこの関数を複数回呼ぶと,毎回同じ結果が
返ってきて,IMの状態変化を確認することができません.

C言語のプログラムからIMの状態変化を追跡するのは不可能なのでしょうか?