続行する前に、これはおそらく最もハックで、実に邪悪で厄介なトピックであると言って、この投稿の前置きをしたいと思います。そのため、回答に「合法的な」コードが含まれているとはまったく期待していません。
OS X Mountain Lion がディクテーションを有効にするためのホット キーの組み合わせを格納するために使用する内部設定ファイルにアクセスしようとしているときに、System Preferences.app で定義されたキー コードを含む、美しく細工された署名付き整数に出くわしました。問題は、私が考えることができる唯一の方法はCGEvent
、特定のキーコードのビットマスクを調べて基本的に解析することであり、これは潜在的に無益で迷惑な試みです. そして、CGEvent
便利なように内部構造体 ( __CGEvent
) に typedef されているため、それが内部構造であることを確認する方法はありません (つまり、ここmalloc()
から抜け出すことはできません)。これまでに得たものは、以下のコードに示されています。
/***************************************UNSAFE*****************************************************/
//1048584, -1048585 - Two Left CMD presses; 1048576, -1048577 - Two CMD presses; 8388608, -8388609 - Two Fn presses; 1048592, -1048593 - Two Right CMD presses
- (void)forceDictation {
NSString *path = [[NSSearchPathForDirectoriesInDomains(NSLibraryDirectory, NSUserDomainMask, YES) lastObject]stringByAppendingPathComponent:@"Preferences/com.apple.symbolichotkeys.plist"];
NSDictionary *dictationPrefs = [NSDictionary dictionaryWithContentsOfFile:path];
NSDictionary *dictationDict = dictationPrefs[@"AppleSymbolicHotKeys"];
NSDictionary *keyvalueDict = dictationDict[@"164"];
NSDictionary *valueDict = keyvalueDict[@"value"];
NSArray *parameters = valueDict[@"parameters"];
NSInteger firstCode = [[parameters objectAtIndex:0]longLongValue];
NSInteger secondCode = [[parameters objectAtIndex:1]longLongValue];
}
HIToolbox のイベント ビットマスクに精通している人なら誰でも、これらのキー コード表現が、簡単にイベントに変換されてすぐに起動できれば、非常に役立つことがわかるでしょう。