그들이 있기 때문에 당신은 NSStatusItem
개체로 모든 항목을 얻을 수는 없습니다 모든 프로세스에 속한다.
기술적으로 상태 항목이 (경계선 없음) 창이므로 화면에있는 위치와 앱을 소유 한 앱에만 관심이있는 경우 CGWindow
API로 처리 할 수 있습니다. 모든 상태 표시 줄 항목에 대한 정보를 기록하는 예는 다음과 같습니다.
NSArray *windowInfos = (NSArray *)CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly, kCGNullWindowID);
for (NSDictionary *windowInfo in windowInfos) {
if (([[windowInfo objectForKey:(id)kCGWindowLayer] intValue] == 25)
&& (![[windowInfo objectForKey:(id)kCGWindowOwnerName] isEqual:@"SystemUIServer"])) {
NSLog(@"Status bar item: %@", windowInfo);
}
}
[windowInfos release];
시스템의 항목은 포함되어 있지 않습니다. 그들은 모두 "SystemUIServer"에 속한 하나의 창에 결합됩니다. 또한이 방법은 상태 표시 줄 항목의 창 레이어가 변경 될 수 있으므로 특히 신뢰할 수는 없습니다 (여기서는 25로 가정하지만 어디에도 설명되어 있지 않음).
출처
2012-02-04 07:51:00
omz
감사합니다. 나는 그것을 시도 할 것이다 –
안녕하세요, 나는 상태 표시 줄에 애플 리케이션을 얻을 필요가있다. 보관 용 계정, 배터리 상태 등의 아이콘 ... 목록 상자에 목록으로 표시하고 싶습니다. 모든 창을 나열하도록 코드를 변경했지만 드롭 박스와 다른 앱이 결과에 나타나지 않습니다. –
@ JonathanChacón, 솔루션을 찾았습니까? – jimwan