2012-07-12 19 views
6

Tôi đang cố gắng viết ứng dụng bổ sung cho menu Mac OS hiển thị menu ngữ cảnh có chứa các mục menu của ứng dụng hiện đang hoạt động khi người dùng nhấn một số phím nóng. Việc hiển thị menu ngữ cảnh tôi có thể làm tốt, nhưng dường như tôi không thể nhận được các mục menu của ứng dụng hiện đang hoạt động. Hiện tại, tôi đang sử dụng [[[NSWorkspace sharedWorkspace] runningApplications] filteredArrayUsingPredicate:] để nhận tên của các ứng dụng đang hoạt động, nhưng NSRunningApplication dường như chứa thông tin nhỏ quý giá khác. Có cách nào tôi có thể nhận thông tin về các menu ứng dụng từ một ứng dụng bên ngoài không?Mục tiêu-C: nhận thông tin trình đơn từ ứng dụng bên ngoài

UPDATE:

Sử dụng khuôn khổ ScriptingBridge dường như làm việc khá tốt, nếu bạn hài lòng sử dụng AppleScript:

SystemEventsApplication* sevApp = [SBApplication applicationWithBundleIdentifier:@"com.apple.systemevents"]; 
    SystemEventsProcess* proc = [[sevApp applicationProcesses] objectWithName:appName]; 

    for (SystemEventsMenuBar* menuBar in proc.menuBars) { 
     for (SystemEventsMenuBarItem* menuBaritem in menuBar.menuBarItems) { 
      NSLog(@"%@", menuBaritem.name); 
     } 
    } 

sẽ in ra một danh sách các menu có sẵn từ thanh menu của ứng dụng . Đã không tìm thấy một cách để có được trình đơn ngữ cảnh, vì vậy tôi sẽ không gọi đây là trả lời chỉ được nêu ra ...

này là hữu ích quá: http://robnapier.net/blog/scripting-bridge-265

+0

** CẢM ƠN BẠN! ** Tôi muốn cung cấp cho bạn nhiều hơn +1, nhưng tôi sẽ không biết làm cách nào. Biên dịch '/ System/Library/CoreServices/System Events.app' thành tiêu đề có lẽ là điều kỳ lạ nhất mà tôi từng làm với Xcode nhưng hey, nó hoạt động! Bạn có muốn biết vị trí của shortcut hoặc thuộc tính 'keyEquivalent' bị ẩn trong' SystemEventsMenuItem' không? – epologee

Trả lời

0

Bạn có thể sử dụng để mô phỏng AppleScript nhấp chuột vào một mục trình đơn như được hiển thị here, nhưng tôi không chắc liệu có thể tự động lấy tên của tất cả các mục menu hay không, để sử dụng phương pháp đó bạn cần phải có tên được mã hóa cứng vào ứng dụng.

+0

Xin cảm ơn! Tôi đã làm một số đào xung quanh, tìm thấy [bài viết này] (http://hints.macworld.com/article.php?story=20111208191312748) trong đó có một cách thức làm việc khá táo bạo chính xác những gì tôi muốn ... Tôi sẽ giữ tìm kiếm một phương pháp Objective-c. Đóng gói một bản ghi vào ứng dụng của tôi có thể rất lộn xộn. – alaroldai

+0

Bạn có thể sử dụng appleScript từ các ứng dụng ca cao mà không gặp quá nhiều rắc rối, xem [NSAppleScript] (https://developer.apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSAppleScript_Class/Reference/Reference.html). Rõ ràng nó không đẹp như objc thẳng nhưng tôi không biết nếu bạn sẽ tìm thấy một giải pháp tích hợp đơn giản trong objc thuần túy. Chúc may mắn – stonesam92