2011-09-11 34 views
16

iTunes và Reeder (và tôi chắc chắn nhiều ứng dụng khác) có khả năng sửa đổi hành vi khởi động bất cứ khi nào chúng được khởi chạy trong khi giữ phím ⌥ (tùy chọn). Tôi đã thử xem xét các phương pháp NSApplicationDelegate, nhưng không có cách nào thêm bất kỳ loại gợi ý nào vào những gì tôi đang tìm kiếm. Chức năng này đạt được như thế nào?Bí quyết đằng sau "ứng dụng khởi chạy giữ [phím bổ trợ]" là gì?

Trả lời

23

Trong applicationDidFinishLaunching đại biểu ứng dụng của bạn: Phương pháp

NSUInteger flags = ([NSEvent modifierFlags] & NSDeviceIndependentModifierFlagsMask); 

BOOL isOptionPressed = (flags == NSAlternateKeyMask); 

(Edited để phù hợp tuyệt vời câu trả lời Declaring and checking/comparing (bitmask-)enums in Objective-C Trước đây này là BOOL isOptionPressed = (0 != (flags & NSAlternateKeyMask)); Nhưng việc kiểm tra không là không cần thiết để kiểm tra xem một mặt nạ bit cho bình đẳng, trừ trường hợp Mặt nạ bit tự đại diện cho tất cả các số không trong nhị phân. Liên kết được cung cấp cung cấp chi tiết hơn. )

+0

Vui lòng tham khảo tuyệt vời http://stackoverflow.com/questions/16166895/declaring-and-checking-comparing-bitmask-enums-in-objective-c – uchuugaka

1

nhu cầu trả lời của Francis McGrew chứng minh trước khi nó có thể hoạt động, nhưng tôi vẫn không thấy giải pháp nào thông qua tuyến đường đó. Câu trả lời như đã nêu không biên dịch. Một con trỏ NSEvent thực sự là cần thiết cho modifierFlags, mà không phải là một phương thức lớp như câu trả lời sẽ gợi ý.

Người ta hy vọng rằng sự kiện cần thiết có thể thu được bằng những điều sau đây.

NSEvent *event = [NSApp currentEvent]; 

Tuy nhiên khi được gọi từ applicationDidFinishKhả thực sự kiện kết quả là không. Ít nhất điều này là đúng trong thử nghiệm của tôi trên Snow Leopard.

applicationDidFinishLaunching có đối số NSNotification nhưng tôi không biết cách sử dụng nó.

Tôi tìm thấy một câu hỏi tương tự trên cocobuilder.com từ năm 2007 và câu trả lời về cơ bản là gọi hàm cacbon GetCurrentKeyModifiers và chuyển đổi cờ carbon thành dạng ca cao.

Xem http://www.cocoabuilder.com/archive/cocoa/176882-detecting-modifier-keys-at-launch.html

+0

Bạn đã nói rất nhiều nhưng không có bất kỳ giải pháp thực tế hoặc thậm chí tiềm năng nào, hãy thử và trả lời trực tiếp câu hỏi trong tương lai – shenku

+0

+ (NSEventModifierFlags) công cụ sửa đổiFlags NS_AVAILABLE_MAC (10_6); là một phương thức lớp không cần cho một cá thể –

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