griffin-stewie さんより、Dockのメニューがあるとの指摘を受けた。早速 WindowListを調査してみる。
WindowListのタイマーを仕掛けてDockのメニューを開いておく。
出た。layer=101で普通のメニューであることがわかる。特徴としては Owner nameが"Dock"になっていること。
前回のサンプルでキャプチャしてみる。案の定、メニューバーが入っている。
処理としてはコンテキストメニューと同じなので、OwnerName=="Dock"を利用してフラグを立てた後、処理を合流させてやる。
AppController.m
// (2) search normal menus
for (i=0; i < CFArrayGetCount(window_list); i++) {
:
NSString *owner_name = (NSString*)CFDictionaryGetValue(window, kCGWindowOwnerName);
if ([owner_name isEqualToString:@"Dock"]) {
is_dockmenu = YES;
}
:
// (3) calcurate rect
if (is_contextmenu || is_dockmenu) {
rect_all = CGRectNull;
:
さて再チャレンジしてみよう。
できた。
ソース:MenuCapture-08.zip
- - - -
今度こそメニューが制覇できただろうか。