Прежде чем продолжить, я хотел бы прочитать это сообщение, сказав, что это, возможно, самая хакерская, совершенно злая, противная тема, поэтому я не ожидаю, что ответы будут содержать «юридические "код любым растяжением.Создание CGEvent из целого числа со знаком
При попытке получить доступ к файлу внутренних настроек OS X Mountain Lion использует для включения комбинации горячих клавиш для активации диктовки, я наткнулся на некоторые красиво созданные знаковые целые числа, содержащие коды ключей, определенные в System Preferences.app. Проблема в том, что единственный способ, которым я могу думать о том, чтобы натирать их на CGEvent
, - это пройти и в основном разобрать битмаску для данного кода ключа, что является потенциально бесплодным и раздражающим делом. И потому что CGEvent
удобно typedef'd для внутренней структуры (__CGEvent
), нет никакой возможности увидеть, что это внутренняя организация (другими словами, я не могу выйти из этого 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 можно увидеть, как невероятно полезны эти ключевые кодовые представления было бы, если бы только они могли быть легко превращен в Затем события вышли в синий цвет.
Не то, чтобы это проливало свет на что-либо, но между каждой парой чисел 'a' и' b', 'a = ~ b'. При догадках это может быть мерой против подделки: может быть проверка, что 'a^b = ~ 0'. –