Как получить элемент в центре управления Touch Bar справа?
Приложение TouchSwitcher добавляет элемент рядом с подсветкой и элементами тома:
https://hazeover.com/touchswitcher.html
![введите описание изображения здесь]()
Есть ли решение для отображения элемента в полосе управления в правой области сенсорной панели?
Я не могу найти никакой помощи в официальной документации об этом...
Пожалуйста, помогите мне!
Ответы
Ответ 1
После декомпиляции я обнаружил некоторые API в рамках под названием DFRFoundation, расположенные в разделе /System/Library/PrivateFrameworks, и связанный с ним метод DFRElementSetControlStripPresenceForIdentifier
. Мне трудно получить дальнейшее развитие, поэтому я отвечаю только здесь, чтобы сообщить вам, что API для этого находится в частной структуре. Надеюсь, кто-то когда-нибудь раскроет секреты.
Ответ 2
Здесь то, что я использую. Передайте NSView
и идентификатор по вашему выбору в функцию controlStrippify()
. Мои попытки сделать то же самое с помощью Swift привели к сбоям, порты приветствуются:). Вдохновение от https://github.com/a2/touch-baer.
@import Cocoa;
@import Foundation;
// See: https://github.com/a2/touch-baer
extern void DFRSystemModalShowsCloseBoxWhenFrontMost(BOOL);
extern void DFRElementSetControlStripPresenceForIdentifier(NSString *string, BOOL enabled);
@interface NSTouchBarItem ()
+ (void)addSystemTrayItem:(NSTouchBarItem *)item;
@end
@interface NSTouchBar ()
+ (void)presentSystemModalFunctionBar:(NSTouchBar *)touchBar systemTrayItemIdentifier:(NSString *)identifier;
@end
void controlStrippify(NSView *view, NSString *identifier) {
if (@available(macOS 10.12.2, *)) {
DFRSystemModalShowsCloseBoxWhenFrontMost(YES);
NSCustomTouchBarItem *touchBarItem = [[NSCustomTouchBarItem alloc] initWithIdentifier:identifier];
touchBarItem.view = view;
[NSTouchBarItem addSystemTrayItem:touchBarItem];
DFRElementSetControlStripPresenceForIdentifier(identifier, YES);
} else {
// Fail!
}
}