2012-12-07 40 views
5

Tôi muốn lấy danh sách cửa sổ cho một ứng dụng đang chạy. Tôi có thể lấy danh sách ứng dụng đang chạy từ [[NSWorkspace sharedWorkspace] runningApplications], nhưng danh sách cửa sổ chỉ có sẵn trên NSApplication. Có cách nào để chuyển đổi từ NSRunningApplication thành NSApplication hoặc một số cách để có được danh sách cửa sổ trực tiếp hơn không?cách nhận các cửa sổ của NSRunningApplication

+0

Đây là câu hỏi tương tự, đã được trả lời: http://stackoverflow.com/questions/2107657/mac-cocoa-getting-a-list-of-windows-using-accessibility-api –

+0

Ngay cả ở đây http: // stackoverflow.com/questions/13759688/how-to-find-out-if-an-instance-of-my-app-is-already-running-or-not/13759928#13759928 –

+0

Danh sách góa phụ trực tiếp hơn nghĩa là gì? –

Trả lời

6

Bạn cần xem cuộc gọi CoreGraphics CGWindowListCopyWindowInfo.

Bạn gọi nó như thế này

CFArrayRef windowList = CGWindowListCopyWindowInfo(kCGWindowListOptionOnScreenOnly | kCGWindowListExcludeDesktopElements, kCGNullWindowID); 

và sau đó lặp qua các mảng thông tin cửa sổ, tìm những người mà là từ các ứng dụng mà bạn đang quan tâm, và làm những gì bạn muốn với nó.

+3

Xin chào Ken! Đó là một câu trả lời hay, nhưng nó vẫn không biết cách lấy 'CG/NSWindow' ;-)' NSRunningApplication' không cung cấp số cửa sổ/cửa sổ và tôi đang gặp lỗi (có thể làm điều gì sai) khi cố gắng để có được 'NS/CGWindow' với' CGWindowID' của tôi thu được bằng 'CGWindowListCopyWindowInfo' –

+1

Đó là vì bạn không thể tạo một NSWindow cho một ứng dụng khác. Theo như nhận được các cửa sổ cho một ứng dụng cụ thể, bạn có thể kiểm tra và so sánh giá trị của khóa 'kCGWindowOwnerPID' với thuộc tính' processIdentifier' của 'NSRunningApplication'. – mattsven

Các vấn đề liên quan