Вопрос

Я отправил это в Кеннитм (есть все личные заголовки рамок на 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.

Кроме того, я должен написать или сделать что-нибудь особенное, если я хочу эту утилитую, чтобы управлять всеми приложениями, а также трамплина?

Насколько я знаю, нет.


Для двух других, вероятно, вы должны разделить их в индивидуальные вопросы.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top