Комментарии 3
Это какой-то прикол? В хабе "разработка под MacOS/iOS" рекомендовать какой-то питон скрипт из трёх строк, который через pyobjc вызывает код на чистейшем Objective-C?
def HIDPostAuxKey(key):
def doKey(down):
ev = Quartz.NSEvent.otherEventWithType_location_modifierFlags_timestamp_windowNumber_context_subtype_data1_data2_(
NSSystemDefined, # type
(0, 0), # location
0xa00 if down else 0xb00, # flags
0, # timestamp
0, # window
0, # ctx
8, # subtype
(key << 16) | ((0xa if down else 0xb) << 8), # data1
-1 # data2
)
cev = ev.CGEvent()
Quartz.CGEventPost(0, cev)
doKey(True)
doKey(False)
вместо маленькой программы на Objective-C, которые тут все наверное умеют написать.
У меня получилось вот так:
@import CoreGraphics;
static const CGEventField kCGEventSubtype = 0x53;
static const CGEventField kCGEventData1 = 0x95;
static const CGEventField kCGEventData2 = 0x96;
static CGEventRef CGEventCreateMediaKeyEvent(CGEventSourceRef _Nullable source, int64_t key, BOOL down) {
CGEventFlags flags = (down ? NX_KEYDOWN : NX_KEYUP) << 8;
CGEventRef e = CGEventCreate(source);
CGEventSetType(e, NX_SYSDEFINED);
CGEventSetFlags(e, flags);
CGEventSetIntegerValueField(e, kCGEventSubtype, 8);
CGEventSetIntegerValueField(e, kCGEventData1, flags | (key << 16));
CGEventSetIntegerValueField(e, kCGEventData2, -1);
return e;
}
static void PostKey(CGEventSourceRef _Nullable source, uint64_t key) {
{
CGEventRef e = CGEventCreateMediaKeyEvent(source, key, YES);
CGEventPost(kCGHIDEventTap, e);
CFRelease(e);
}
{
CGEventRef e = CGEventCreateMediaKeyEvent(source, key, NO);
CGEventPost(kCGHIDEventTap, e);
CFRelease(e);
}
}
int main(int argc, const char * argv[]) {
CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateHIDSystemState);
PostKey(source, NX_KEYTYPE_SOUND_UP);
CFRelease(source);
return 0;
}
Более того, статья и в целом совершенно дебильная. Мало того, что рекомендуется разрешить ssh доступ к компьютеру, что я захотел бы делать в последнюю очередь. Так и не объясняется как же всё-таки связать этот скрипт с шорткатом в iOS. Нужно проявить чудеса телепатии, чтобы догадаться, что картинки из README в репозитории, это на самом деле ссылки на экшен в апсторе. Напоследок, остаётся практический вопрос: где гарантия, что мак всегда будет доступен по одному и тому же ip адресу? В статье ничего не говорится о том, как этого достичь.
Управляем воспроизведением на Mac OS через быстрые команды iOS