Tôi đang viết một ứng dụng Mac đơn giản được thiết kế để chạy ẩn và thực hiện các tác vụ nhất định bất cứ khi nào người dùng nhấp vào nút chuột. Ứng dụng được viết bằng Python sử dụng PyObjC. Tôi đang sử dụng addGlobalMonitorForEventsMatchingMask
để xem cho NSLeftMouseDown
sự kiện:NSEvent giám sát sự kiện toàn cầu ở chế độ nền
NSEvent.addGlobalMonitorForEventsMatchingMask_handler_(NSLeftMouseDownMask, handler)
Mã này hoạt động hoàn hảo khi chạy trong nhà ga. Tuy nhiên, khi tôi gói nó như một ứng dụng độc lập (sử dụng py2app) và sau đó khởi động nó, ứng dụng không nhận được bất kỳ sự kiện nào lúc đầu. (Hoặc ít nhất, nếu có, nó không chạy mã trong phương thức xử lý của tôi.) Chỉ khi tôi nhấp vào ứng dụng trong Dock, nó bắt đầu nhận sự kiện, và sau đó, nó tiếp tục nhận sự kiện ngay cả sau khi nó trở về nền. Nhưng nó không nhận được bất cứ điều gì cho đến khi kích hoạt một lần.
Câu hỏi của tôi là: Làm cách nào để ứng dụng của tôi có thể bắt đầu nhận sự kiện ngay khi được khởi chạy mà không cần phải kích hoạt trước bằng cách nhấp vào biểu tượng Bến tàu? Đây có phải là một số quirk được biết đến của NSEvents
, hoặc là có lẽ một cái gì đó sai với vòng chạy của tôi trong PyObjC?
Bất kỳ trợ giúp hoặc hướng dẫn nào được đánh giá cao!
Chỉnh sửa: Khi tiếp tục thử nghiệm, có vẻ như, trên thực tế, ứng dụng của tôi tự động bắt đầu nhận thông báo khoảng mười giây sau khi khởi chạy, bất kể tôi có kích hoạt hay không. Đó là hơi khó chịu, nhưng tốt.
Tuy nhiên, nếu tôi chạy ứng dụng với LSUIElement = true
hoặc LSBackgroundOnly = true
trong số Info.plist
(mà cuối cùng tôi muốn làm, vì ứng dụng này chỉ chạy trong nền và không bao giờ xuất hiện trong Dock), tôi không bao giờ nhận được thông báo. Vì vậy, tôi vẫn còn bị mắc kẹt.
Bạn có chắc chắn rằng dòng này thực hiện khi ứng dụng bắt đầu? – akaRem
Bạn có thể đăng một [ví dụ tối thiểu, đầy đủ, hợp lệ] (http://stackoverflow.com/help/mcve) mà những người khác có thể sử dụng để tái sản xuất và có thể gỡ lỗi sự cố không? – abarnert
kiểm tra xem nó có đáp ứng các nguyên tắc của AppStore hay không. nhưng nếu nó là để sử dụng cá nhân, hãy thử nó với Xcode. muốn một ví dụ? –