Как управлять мышью в Mac с помощью Python? - PullRequest
28 голосов
/ 11 ноября 2008

Какой самый простой способ перемещения мыши (и, возможно, щелчка) с помощью Python на OS X?

Это просто для быстрого прототипирования, оно не должно быть элегантным.

Ответы [ 11 ]

0 голосов
/ 15 ноября 2008

Самый простой способ? Скомпилируйте это приложение Какао и передайте ему движения мыши.

Вот код:

// File:
// click.m
//
// Compile with:
// gcc -o click click.m -framework ApplicationServices -framework Foundation
//
// Usage:
// ./click -x pixels -y pixels
// At the given coordinates it will click and release.

#import <Foundation/Foundation.h>
#import <ApplicationServices/ApplicationServices.h>

int main(int argc, char **argv) {
  NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
  NSUserDefaults *args = [NSUserDefaults standardUserDefaults];


  // grabs command line arguments -x and -y
  //
  int x = [args integerForKey:@"x"];
  int y = [args integerForKey:@"y"];

  // The data structure CGPoint represents a point in a two-dimensional
  // coordinate system.  Here, X and Y distance from upper left, in pixels.
  //
  CGPoint pt;
  pt.x = x;
  pt.y = y;


  // https://stackoverflow.com/questions/1483567/cgpostmouseevent-replacement-on-snow-leopard
  CGEventRef theEvent = CGEventCreateMouseEvent(NULL, kCGEventLeftMouseDown, pt, kCGMouseButtonLeft);
  CGEventSetType(theEvent, kCGEventLeftMouseDown);
  CGEventPost(kCGHIDEventTap, theEvent);
  CFRelease(theEvent);

  [pool release];
  return 0;
}

Приложение вызвало щелчок, который вызывает CGPostMouseEvent из заголовочного файла CGRemoteOperation.h. Он принимает координаты в качестве аргументов командной строки, перемещает мышь в эту позицию, затем щелкает и отпускает кнопку мыши.

Сохраните приведенный выше код как click.m, откройте терминал и перейдите в папку, где вы сохранили исходный код. Затем скомпилируйте программу, набрав gcc -o click click.m -framework ApplicationServices -framework Foundation. Не пугайтесь необходимости компилировать это, так как комментариев больше, чем кода. Это очень короткая программа, которая выполняет одну простую задачу.


Другой способ? Импортируйте pyobjc , чтобы получить доступ к некоторым элементам OSX и таким образом получить доступ к мыши. (см. код из первого примера для идей).

...