OS X

マウスカーソルの座標をリアルタイムに取得する

OS X でマウスカーソルの現在位置の座標をリアルタイムに取得する方法を紹介します。

マウスの座標をリアルタイムに取得する

他のアプリケーションがアクティブな時にイベントを処理できる Global Monitor と、自アプリケーションがアクティブな時にイベントが処理できる Local monitor を組み合わせて取得できます。

- (void)applicationDidFinishLaunching:(NSNotification *)aNotification
{
    // Insert code here to initialize your application
    // マウスの座標をリアルタイムに取得する
    // 他のアプリケーションに対して送られたイベントを処理する
    [NSEvent addGlobalMonitorForEventsMatchingMask:NSMouseMovedMask
                                           handler:^(NSEvent *event)
    {
        NSPoint point = [event locationInWindow];
        NSLog(@"global:(%lf, %lf)", point.x, point.y);
    }];
    
    // このアプリケーションに対して送られたイベントを処理する
    [NSEvent addLocalMonitorForEventsMatchingMask:NSMouseMovedMask
                                          handler:^(NSEvent *event)
    {
        NSPoint point = [event locationInWindow];
        NSLog(@"local:(%lf, %lf)", point.x, point.y);
        return event;
    }];
}

Blocks で記述できて、NSEvent 型で値が返ってきます。NSEvent からウィンドウの座標を取得するには、 locationInWindow メソッドを使っています。

OS X では、ウィンドウの左下が原点になるようですね。

参考:NSEvent Class Reference