2012-12-28 9 views
5

Tôi muốn tạo một ứng dụng tương tự như một cái gì đó như TextExpander, nhưng tôi không chắc chắn làm thế nào bạn sẽ đánh chặn văn bản. Theo như tôi có thể nói, tôi cần phải bắt đầu với NSAccessability. Bất cứ ai có thể chia sẻ một số đoạn trích, hoặc ít nhất là chỉ cho tôi đi đúng hướng?API để chặn nhập văn bản trong một ứng dụng khác?

Trả lời

6

Trước hết, bạn nên lưu ý rằng, vì yêu cầu hộp cát, điều này hoàn toàn không thể nếu bạn muốn bán ứng dụng của mình trong App Store.

Nếu bạn không có ý định sandbox ứng dụng của bạn, bạn có thể sử dụng phương pháp NSEvent lớp addGlobalMonitorForEventsMatchingMask: để tạo ra một xử lý sự kiện quan trọng toàn cầu mà được gọi là khi bấm phím nào trong các ứng dụng khác (nhưng không phải ứng dụng riêng của bạn, sử dụng addLocalMonitor... cho cái đó).

Để thực sự chèn đoạn trích, như TextExpander, có một số cách. Bạn có thể sử dụng API trợ năng nhưng điều đó yêu cầu (các) ứng dụng bạn đang nhắm mục tiêu trợ năng hỗ trợ, điều này không phải lúc nào cũng đúng.

Một tùy chọn khác là sử dụng Quartz Event Services (CGEvent) APIs cung cấp (trong số những thứ khác) một phương pháp cấp thấp để mô phỏng các sự kiện quan trọng.

+0

"yêu cầu (các) ứng dụng bạn đang nhắm mục tiêu khả năng truy cập hỗ trợ" không phải là thứ tự cao FWIW. Nếu họ không sử dụng các lớp tùy chỉnh và thay vào đó sử dụng NSTextField và bạn bè, khả năng truy cập được xây dựng. Tôi đã thử nghiệm với điều này một thời gian trở lại cho một dự án skunkworks nhỏ. Khung công tác [PFAssistive] (http://pfiddlesoft.com/frameworks/) đã làm cho công việc dễ dàng hơn nhiều để làm tê liệt cấu trúc phân cấp của các đối tượng trợ năng. – jxpx777

+0

Dịch vụ sự kiện thạch anh cũng là một cách hay để quan sát các lần nhấn phím mà không cần phải kích hoạt quyền truy cập cho các thiết bị trợ giúp. Để làm điều này, bạn phải chạy (một quá trình trợ giúp nhỏ) với các đặc quyền root để có được các sự kiện quan trọng. –

1

Chỉnh sửa: Không bao giờ. Bạn đang hỏi về Mac OS. Tôi nghĩ bạn đã hỏi về iOS.

Bạn nên xem how TextExpander is used by other apps. Ứng dụng đích phải xây dựng để hỗ trợ TE bằng cách tạo ra một đối tượng được cung cấp bởi TE một delegate của trường text. Bạn không thể chạy mã của mình trong ứng dụng của người khác. Họ phải biên dịch mã của bạn vào ứng dụng của họ. Đó là lý do tại sao có một SDK TextExpander.

Khi mã TextExpander nằm trong ứng dụng đích, ủy nhiệm trường văn bản nhận đoạn trích được chia sẻ bằng cách tìm đoạn mã được đưa vào một shared pasteboard.