Установите местоположение мыши

#objective-c #macos #cocoa #mouse-cursor

#цель-c #macos #cocoa #мышь-курсор

Вопрос:

Мне нужно иметь возможность установить местоположение мыши в середине экрана / окна. Как я могу это сделать?

Комментарии:

1. Я думаю, что это одна из тех вещей, где нет простого способа сделать это, потому что это не очень удобно для пользователя.

2. Я не думаю, что установка местоположения мыши в определенную точку была бы очень полезной… но опять же, я не слишком уверен, чего вы хотите от своей программы…

3. Элегантного способа сделать это не существует, потому что это крайне недружелюбно к пользователю.

4. Можете ли вы объяснить свою конечную цель? Возможно, есть другой способ достичь этого.

5. В этом случае вы также захотите использовать CGAssociateMouseAndMouseCursorPosition, чтобы вам не нужно было вызывать CGWarpMouseCursorPosition в каждом кадре.

Ответ №1:

Кажется, в документации указано, что CGDisplayMoveCursorToPoint или CGWarpMouseCursorPosition будут делать то, что вам нужно.

РЕДАКТИРОВАТЬ: Чтобы соответствовать вашему последнему комментарию, я бы дополнительно рекомендовал CGWarpMouseCursorPosition , о котором говорится в документах:

Например, эта функция часто используется для перемещения курсора обратно в центр экрана в играх, которые не хотят, чтобы курсор был закреплен по краям экрана.

Комментарии:

1. Только что попробовал это. Спасибо за вашу помощь, но эта функция, похоже, переопределяет мой обработчик мыши в моей игре.

2. @ChaseWalden, под «переопределением» ты имеешь в виду, что именно? Они больше не вызываются?

3. да. Он отвечает, возможно, в течение 2-3 кадров, а затем блокируется.

Ответ №2:

Я работал над чем-то подобным на прошлой неделе.

   CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
  CGEventRef mouse = CGEventCreateMouseEvent (NULL, kCGEventMouseMoved, CGPointMake( X, Y), 0);
  CGEventPost(kCGHIDEventTap, mouse);
  CFRelease(mouse);
  CFRelease(source);
  

Просто установите X и Y.

Редактировать:

 #include <ApplicationServices/ApplicationServices.h>
  

Комментарии:

1. Это (пока) отлично работает для меня. Я использую это вместе с [NSCursor скрыть] в приложении для запуска полноэкранных видеороликов в случайном порядке (для компьютеров, настроенных как установки, на которых нет взаимодействия с пользователем). Это позволяет мне предотвратить отображение мыши или наведение курсора мыши на строку меню.