Используя графические сервисы.
-
26-09-2019 - |
Вопрос
Я отправил это в Кеннитм (есть все личные заголовки рамок на GitHub), но я подумал, что спрошу здесь тоже на всякий случай, если у кого-то есть хорошие идеи или любой способ помочь мне.
Я пытаюсь написать утилиту командной строки, которая отправляет GSevents для эксплуатации клавиатуры, элементы касания / перетаскивания на экране, а также управлять аппаратными кнопками (громкость, дом, сон и т. Д.)
Я схватил код Mousesupport и попытался просмотреть его, но я не мог найти самый простой способ отправить GSevents. Я надеюсь, что кто-то здесь может помочь мне.
Во-первых, какой самый простой способ объявить GSevent и отправить его? Я посмотрел на развитие iPhone Wiki, но документация была очень расплывчатой. Я понимаю, что есть фиолетовый порт событий (?) Что я должен отправить эти события, но я не понимаю, как это сделать. Может ли кто-нибудь предложить примеры, скажем, касаясь координаты, набрав определенный ключ или нажав кнопку аппаратного обеспечения?
Кроме того, я должен написать или сделать что-нибудь особенное, если я хочу эту утилитую, чтобы управлять всеми приложениями, а также трамплина? Я не знаю, является ли это особый случай, потому что я хочу это на уровне ОС. В идеале я бы SSH в телефон, запустите программу, и она отправила бы Gsevents, которые будут обрабатываться любые приложением.
Что касается этого кода, есть ли способ сделать это под XCode? Я не знаю, какой шаблон проекта я должен использовать (если есть), и это отбрасывает меня. Мне не нужно поддерживать «построить и идти», я более чем счастлив на SCP программу на телефон. Я понимаю, что составление кода также выполнимо по телефону. У меня все заголовки из SDK на моем телефоне вместе с iPhone-gcc, но при компиляции некоторых тестовых программ я все еще получаю ошибки о не нахождении заголовков Mach и Corefoundation. Есть ли более простой способ сделать это?
Наконец, есть ли другие гиды или предметы литературы, что кто-нибудь может указать мне на то, чтобы узнать больше об этом? Я взволнован, чтобы попасть в открытое развитие iPhone (у меня есть опыт работы с официальным SDK, но я хочу пойти глубже).
Спасибо за любую и все помоги люди могут предложить!
Решение
Во-первых, какой самый простой способ объявить GSevent и отправить его?
Это зависит от типа GSevent. Некоторые события имеют удобные функции, которые могут быть созданы и отправлены на один шаг, например GSEventLockDevice()
. Отказ Но спрятанные события (прикосновения, ключевые прессы и т. Д.) Не имеют этих простых функций. Причина, вероятно, потому что GSEventLockDevice()
и т.д. должны быть отправлены от Приложение для трамплина, но спрятанные события отправляются от Прайна до приложения. Следовательно, только команда Springboard должна знать, как построить сложный гьевент.
В любом случае, чтобы создать событие HID (например, событие акселерометра), вам не нужно создавать GSevent. Просто использовать GSSendEvent()
:
// (not tested.)
GSAccelerometerInfo accel = {0.0f, 0.0f, 1.0f};
GSEventRecord header;
memset(&header, 0, sizeof(header));
header.type = kGSEventAccelerate;
header.infoSize = sizeof(accel);
header.timestamp = mach_absolute_time();
// fill in other members.
struct {
GSEventRecord record;
GSAccelerometerInfo info;
} record = {header, accel};
// ... see below ...
GSSendEvent(&record, thePortOfApp);
Но что такое «порт приложения»? К сожалению, нет функции, чтобы получить это. По состоянию на 3.1 имя порта MACH такое же, как и идентификатор его связки, поэтому вы можете использовать:
mach_port_t thePortOfApp = GSCopyPurpleNamedPort("com.unknown.appBundleID");
...
mach_port_deallocate(mach_task_self(), thePortOfApp); // remember to release the port.
Кроме того, я должен написать или сделать что-нибудь особенное, если я хочу эту утилитую, чтобы управлять всеми приложениями, а также трамплина?
Насколько я знаю, нет.
Для двух других, вероятно, вы должны разделить их в индивидуальные вопросы.