2013-03-04 35 views
6

Quay lại năm 2010, Pierre yêu cầu this câu hỏi (câu trả lời được chấp nhận của anh ấy không hoạt động đối với tôi).Mô phỏng MouseEvent không hoạt động bình thường OSX

Tôi gặp vấn đề tương tự: Tôi có thể di chuyển chuột thành công (và tắt!?!) Màn hình lập trình từ ứng dụng Cocoa của tôi, tuy nhiên việc đưa chuột đến vị trí của dock không hiển thị nó (và một số ứng dụng khác không được đăng ký sự kiện chuột di chuyển, ví dụ như trò chơi mà loại bỏ chuột.)

phương pháp tôi đang sử dụng là như sau:

void PostMouseEvent(CGMouseButton button, CGEventType type, const CGPoint point) 
{ 
    CGEventRef theEvent = CGEventCreateMouseEvent(NULL, type, point, button); 
    CGEventSetType(theEvent, type); 
    CGEventPost(kCGSessionEventTap, theEvent); 
    CFRelease(theEvent); 
} 

và sau đó khi tôi muốn di chuyển chuột tôi chạy:

PostMouseEvent(0, kCGEventMouseMoved, mouseLocation); 

Lưu ý rằng mã này KHÔNG tạo ra các sự kiện di chuột cho những thứ như liên kết.

Bây giờ là năm 2013, có thể khắc phục sự cố này không?

Cảm ơn bạn đã dành thời gian!

Trả lời

0

OK, rõ ràng là MacOSX cần chuột ở chính xác cạnh của màn hình để dock hiển thị! Bởi vì tôi giữ bến tàu của tôi trên bên trái của màn hình (do nhiều chương trình giữ nút quan trọng ở dưới cùng của cửa sổ của họ), tất cả tôi phải làm là nói

if (mouseLocation.x < 0) 
{ 
    mouseLocation.x = 0; 
} 

Và nó làm việc!

Tôi cũng đang sử dụng ý tưởng của KenThomases để làm cong con trỏ.

(câu trả lời này được đánh dấu đúng vì nó cho phép tôi để hiển thị các bến tàu - tuy nhiên vẫn còn một số ứng dụng mà không đáp ứng với đầu vào chuột)

+0

Bạn nên tính đến các cạnh khác của màn hình. Đồng thời, với nhiều màn hình, có thể điểm gốc của màn hình có thành phần âm. –

+0

Có, sẽ làm. OK, tôi không biết về màn hình phụ ... Cảm ơn! (dự án của tôi sẽ sử dụng màn hình phụ ... May mắn bạn đã nói với tôi!) –

3

Tôi sẽ làm cong cả con trỏ và tạo sự kiện di chuyển chuột. Tôi biết từ kinh nghiệm, ví dụ, mà warping con trỏ, trong khi nó không tạo ra một sự kiện riêng của mình, sửa đổi sự kiện di chuyển chuột tiếp theo để bao gồm khoảng cách di chuyển trong delta chuột của nó. Tôi không biết liệu sự kiện di chuyển tổng hợp của bạn có bao gồm các giá trị delta thích hợp không.

+1

Thêm 'CGWarpMouseCursorPosition (điểm); 'ở dưới cùng của PostMouseEvent phương pháp đã không giúp đỡ - là điều này bạn có nghĩa là gì? –

+1

Thêm nó dịch chuyển chuột đến (0,0) nếu nó chạm vào cạnh của màn hình. –

+1

Vâng, tôi muốn làm cong trước khi đăng sự kiện kể từ khi cong vênh thêm delta vào sự kiện tiếp theo. Không thể cho bạn biết lý do tại sao nó sẽ chuyển đến (0, 0) nếu đó không phải là điểm bạn đã chỉ định. –

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