2011-03-14 41 views
1

有沒有一種方法(不使用任何未公開的API)來確定是否拖動了任何窗口(不僅僅是運行代碼的應用程序)?檢測是否有任何窗口被拖動

我可以使用

[NSEvent addGlobalMonitorForEventsMatchingMask:] 

但這只是一般的拖動,有沒有辦法判斷是beign拖動或不是一個窗口。

謝謝!

更新:我想答案可能在於這兩個功能: CGSGetWindowBounds CGSNewRegionWithData 如果有人能告訴我這些功能做,在哪裏可以找到他們的文件,那就太好了!謝謝。

回答

-1

我不知道是否有更好的方法,但這裏的做到這一點的一種方法:

創建BOOL伊娃跟蹤是否正在移動或不是窗口。然後註冊爲NSWindowWillMoveNotification和​​通知:

NSNotificationCenter *nc = [NSNotificationCenter defaultCenter]; 
[nc addObserver:self selector:@selector(windowWillMove:) name:NSWindowWillMoveNotification object:nil]; 
[nc addObserver:self selector:@selector(windowDidMove:) name:NSWindowDidMoveNotification object:nil]; 

然後辦理通知,並設置適當的伊娃:

- (void)windowWillMove:(NSNotification*)notification 
{ 
    windowBeingDragged = YES; 
} 

- (void)windowDidMove:(NSNotification*)notification 
{ 
    windowBeingDragged = NO; 
} 

現在你可以查一下這種情況下,伊娃的(windowBeingDragged價值,檢查一個窗口是否被拖動)。

+0

感謝您的意見。但是,這些通知是針對應用程序擁有的窗口...我詢問任何應用程序的窗口。 – user635064 2011-03-14 02:02:39

+0

哎呀,對不起,我錯過了那部分。在那種情況下,我不確定。 – indragie 2011-03-14 02:04:04

0

您唯一可行的,系統支持的API是Accessibility Framework。您可以通過這種方式獲得notifications以用於其他應用程序的窗口,但訪問讀取/修改僅限於位置/大小。