Simulating mouse input programmatically in OS X

前端 未结 4 1291
悲&欢浪女
悲&欢浪女 2020-12-07 08:26

Is it possible to simulate the actions of a mouse from a program in OS X? Specifically, the short version is that I\'m trying to simulate a touchscreen using two webcams. So

4条回答
  •  自闭症患者
    2020-12-07 08:53

    Here is a working C program based on jweyrick's answer:

    // Compile instructions:
    //
    // gcc -o click click.c -Wall -framework ApplicationServices
    
    #include 
    #include 
    
    int main(int argc, char *argv[]) {
      int x = 0, y = 0, n = 1;
      float duration = 0.1;
    
      if (argc < 3) {
        printf("USAGE: click X Y [N] [DURATION]\n");
        exit(1);
      }
    
      x = atoi(argv[1]);
      y = atoi(argv[2]);
    
      if (argc >= 4) {
        n = atoi(argv[3]);
      }
    
      if (argc >= 5) {
        duration = atof(argv[4]);
      }
    
      CGEventRef click_down = CGEventCreateMouseEvent(
        NULL, kCGEventLeftMouseDown,
        CGPointMake(x, y),
        kCGMouseButtonLeft
      );
    
      CGEventRef click_up = CGEventCreateMouseEvent(
        NULL, kCGEventLeftMouseUp,
        CGPointMake(x, y),
        kCGMouseButtonLeft
      );
    
      // Now, execute these events with an interval to make them noticeable
      for (int i = 0; i < n; i++) {
        CGEventPost(kCGHIDEventTap, click_down);
        sleep(duration);
        CGEventPost(kCGHIDEventTap, click_up);
        sleep(duration);
      }
    
      // Release the events
      CFRelease(click_down);
      CFRelease(click_up);
    
      return 0;
    }
    

    Hosted at https://gist.github.com/Dorian/5ae010cd70f02adf2107

提交回复
热议问题