2009-07-12 31 views
26

Tôi cần lấy vị trí chuột trên màn hình trên máy Mac bằng Xcode. Tôi có một số mã được cho là thực hiện điều đó nhưng tôi luôn trả về x và y là 0:Ca cao: Để vị trí chuột hiện tại trên màn hình

void queryPointer() 
{ 

    NSPoint mouseLoc; 
    mouseLoc = [NSEvent mouseLocation]; //get current mouse position 

    NSLog(@"Mouse location:"); 
    NSLog(@"x = %d", mouseLoc.x); 
    NSLog(@"y = %d", mouseLoc.y);  

} 

Tôi đang làm gì sai? Làm thế nào để bạn có được vị trí hiện tại trên màn hình? Ngoài ra, cuối cùng vị trí đó (được lưu trong NSPoint) cần phải được sao chép vào một CGPoint để được sử dụng với một hàm khác vì vậy tôi cần phải có điều này hoặc là x, y tọa độ hoặc dịch này.

+1

Got it: CGEventRef ourEvent = CGEventCreate (NULL); point = CGEventGetLocation (ourEvent); NSLog (@ "Vị trí? X =% f, y =% f", (float) point.x, (float) point.y); – wonderer

+0

Tôi không hiểu tại sao mã ban đầu của bạn không hoạt động, mã này chỉ hoạt động đáng yêu đối với tôi. – Mecki

Trả lời

23
CGEventRef ourEvent = CGEventCreate(NULL); 
point = CGEventGetLocation(ourEvent); 
CFRelease(ourEvent); 
NSLog(@"Location? x= %f, y = %f", (float)point.x, (float)point.y); 
+7

Đừng quên phát hành CGEventRef đó! – kperryua

+0

Cảm ơn lời khuyên! – wonderer

+0

như marcwan đã trả lời, ví dụ trong câu hỏi không hoạt động vì lỗi với NSLog, phần còn lại là tốt. –

55

Mã gốc của tác giả không hoạt động vì người đó đang cố gắng in nổi ra dưới dạng% d. Mã đúng sẽ là:

NSPoint mouseLoc = [NSEvent mouseLocation]; //get current mouse position 
NSLog(@"Mouse location: %f %f", mouseLoc.x, mouseLoc.y); 

Bạn không cần phải đi đến Carbon để thực hiện việc này.

+4

Đó là Dịch vụ sự kiện Quartz, chứ không phải Carbon, nhưng nếu không bạn sẽ chính xác: Ca cao sẽ thực hiện công việc này Đối tượng CGEvent. –

+1

Rất tiếc, là một người đàn ông ca cao 99% bản thân mình, tôi không phải là tất cả những gì tốt với danh pháp của các công cụ bên dưới. Cảm ơn cho làm rõ :) – MarcWan

+0

tôi có thể có được điểm bắt đầu điểm, điểm kết thúc, chiều cao, chiều rộng .... giống như trên màn hình rular –

10

Cẩn thận trộn môi trường NS với môi trường CG. Nếu bạn nhận được vị trí con chuột bằng phương pháp NS mouseLocation sau đó sử dụng CGWarpMouseCursorPosition (cgPoint), bạn sẽ không được gửi đến điểm trên màn hình bạn mong đợi. Kết quả vấn đề từ CG sử dụng trên cùng bên trái là (0,0) trong khi NS sử dụng dưới cùng bên trái là (0,0).

+0

tôi có thể có được điểm bắt đầu điểm, điểm kết thúc, chiều cao, chiều rộng .... giống như trên màn hình rular –

0
NSLog(@"%@", NSStringFromPoint(point)); 

NSLog là đúng;

5

Câu trả lời cho câu hỏi này trong Swift

let currentMouseLocation = NSEvent.mouseLocation() 
let xPosition = currentMouseLocation.x 
let yPosition = currentMouseLocation.y 
+0

Pos từ topLeft: CGPoint (NSEvent.mouseLocation(). x, abs (NSEvent.mouseLocation(). y + -NSScreen.mainScreen() !. visibleFrame.height)) – eonist

+0

@Andre Làm thế nào tôi có thể nhận được thông báo mỗi lần 'mouseLocation' đã thay đổi? – ixany

+0

@ixany Bạn cần triển khai các sự kiện mouseDragged, mouseEntered và mouseExited. Điều này sẽ làm việc cho cửa sổ của ứng dụng. –

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