2009-07-12 4 views
26

Xcode를 사용하여 Mac 화면에서 마우스 위치를 가져와야합니다. 나는 아마 그 코드를 가지고 있지만 항상 x와 y를 0으로 반환한다.코코아 : 화면에서 현재 마우스 위치 얻기

void queryPointer() 
{ 

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

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

} 

내가 뭘 잘못하고 있니? 화면에서 현재 위치를 어떻게 얻습니까? 또한 궁극적으로 그 위치 (NSPoint에 저장 됨)를 CGPoint에 복사하여 다른 함수와 함께 사용해야하므로 x, y 좌표로 가져 오거나이를 변환해야합니다.

+1

에서이 질문에 대한 답이있어 : CGEventRef ourEvent = CGEventCreate (NULL을); point = CGEventGetLocation (ourEvent); NSLog (@ "Location? x = % f, y = % f", (float) point.x, (float) point.y); – wonderer

+0

초기 코드가 작동하지 않는 이유를 알아 내지 못합니다.이 코드는 저에게 사랑 스럽습니다. – Mecki

답변

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

그 CGEventRef를 공개하는 것을 잊지 마십시오! – kperryua

+0

조언 주셔서 감사합니다! – wonderer

+0

marcwan이 NSLog의 오류로 인해 문제의 예제가 작동하지 않습니다. 나머지는 괜찮습니다. –

55

% d (으)로 수레를 인쇄하려고 시도했기 때문에 작성자의 원래 코드가 작동하지 않습니다. 올바른 코드는 다음과 같습니다.

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

이렇게하려면 Carbon으로 갈 필요가 없습니다.

+4

그건 Quartz Event Services이지 Carbon이 아니지만 맞습니다. 코코아는 제대로 작동하지 않습니다. CGEvent 객체. –

+1

아, 99 % 코코아 녀석이되어서, 나는 그 밑에있는 물건의 명칭에 그다지 좋지는 않다. 명확한 주셔서 감사합니다 :) – MarcWan

+0

내가 포인트 시작 지점, 끝 지점, 높이, 너비를 얻을 수 있습니다 .... 그냥 같은 화면의 요령 –

10

NS 환경과 CG 환경을 조심하십시오. NS mouseLocation 메서드를 사용하여 마우스 위치를 얻은 경우 CGWarpMouseCursorPosition (cgPoint)을 사용하면 예상 한 화면상의 지점으로 보내지 않습니다. NS는 (0,0)으로 왼쪽 아래를 사용하는 반면 CG는 왼쪽 위를 (0,0)으로 사용하여 발생합니다.

+0

내가 포인트 시작 지점, 끝 지점, 높이, 너비 .... 얻을 수 있습니다 screen rular –

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

NSLog가 참입니다.

5

스위프트

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

위에서부터의 위치 : CGPoint (NSEvent.mouseLocation(). x, abs (NSEvent.mouseLocation(). y + -NSScreen.mainScreen() !. visibleFrame.height)) – eonist

+0

@Andre 매번 어떻게 정보를 얻을 수 있습니까? 'mouseLocation'이 변경 되었습니까? – ixany

+0

@ixany 이벤트 mouseDragged, mouseEntered 및 mouseExited를 구현해야합니다. 이것은 응용 프로그램 자체의 창에서 작동합니다. –