Я хотел бы создать дополнительное меню со всеми функциями, которые можно увидеть в дополнительных функциях системного меню, но без использования частного класса, реализованного Apple.
Возможно ли это, или многие функции, отображаемые в дополнительных функциях системного меню, зависят от SystemUIServer?

1
apaderno 17 Дек 2009 в 17:02

2 ответа

Лучший ответ

Это невозможно.
Функции, присутствующие в дополнительных функциях системного меню, реализуются через SystemUIServer; класс, который будет реализовывать эти функции, должен взаимодействовать с SystemUIServer, а это означает, что при изменении кода SystemUIServer должен быть изменен и класс. Вместо того, чтобы создавать новый класс, было бы лучше использовать тот же класс, что и Apple, который не документирован (и который может быть изменен Apple в любой момент).

0
apaderno 19 Дек 2009 в 12:35

Если бы это было возможно, их было бы очень много на рынке, потому что никому не нравится анемичный API NSStatusItem.

2
Azeem.Butt 17 Дек 2009 в 20:21
Поэтому в некоторых дополнениях меню использовался недокументированный класс. Мне интересно, сделано ли это просто для того, чтобы не переписывать код, или потому, что невозможно написать код, который позволяет перемещать меню дополнительно, когда командная клавиша нажимается вместе с левой кнопкой меню.
 – 
apaderno
17 Дек 2009 в 20:39
Я понял вопрос. Если вы найдете стороннее меню, которое не запускает MenuCracker или какой-либо другой взлом, чтобы обманом заставить ОС загрузить его, то вы получите окончательный ответ. Я лично никогда не видел ни одного, и официальная позиция Apple по этому поводу заключается в том, что это невозможно.
 – 
Azeem.Butt
17 Дек 2009 в 21:13
1
Это не так. Строка состояния предоставляется SystemUIServer; таким образом, дополнительные функции меню перетаскивания-переупорядочения, перетаскивания-добавления и перетаскивания-удаления могут быть реализованы только с помощью SystemUIServer.
 – 
Peter Hosey
17 Дек 2009 в 21:27
Правильный ответ состоит в том, что создать такой класс невозможно, потому что он должен взаимодействовать с SystemUIServer, а подробности того, как это сделать, не являются общедоступными.
 – 
apaderno
17 Дек 2009 в 23:36