2016-07-29 2 views
0

Я пытаюсь написать сценарий, который будет иметь право щелкнуть правой кнопкой мыши по OS X 10.11.5. Я использую Foundation Foundation для Objective-C для этого. До сих пор мне удалось успешно щелкнуть левой кнопкой мыши.Опубликовать событие щелчка правой кнопкой мыши, используя CGPostMouseEvent

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

В комментариях упоминается, что мне нужен boolean_t для окончательного параметра в CGPostMouseEvent. Я не уверен, что это значит, но я попытался следующие комбинации Params без толку:

(пт, 1, 1, 0, 1)
(пт, 1, 1, (0, 1))
(пт, 1, 1, 2)

Что такое правильный последний параметр для CGPostMouseEvent, чтобы вызвать правой кнопкой мыши?

#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; 


    // This is where the magic happens. See CGRemoteOperation.h for details. 
    // 
    // CGPostMouseEvent(CGPoint  mouseCursorPosition, 
    //     boolean_t  updateMouseCursorPosition, 
    //     CGButtonCount buttonCount, 
    //     boolean_t  mouseButtonDown, ...) 
    // 
    // So, we feed coordinates to CGPostMouseEvent, put the mouse there, 
    // then click and release. 
    // 

    CGPostMouseEvent(pt, 1, 1, 1); 
    CGPostMouseEvent(pt, 1, 1, 0); 


    [pool release]; 
    return 0; 
} 
+0

'CGPostMouseEvent' устарел в Mac OS 10.6. – Willeke

ответ

1

CGPostMouseEvent использует переменную длину, чтобы передать состояние, кроме левой кнопки мыши кнопки. Параметр mouseButtonDown указывает только, выключена ли левая кнопка мыши. Состояние других кнопок должно быть передано после mouseButtonDown, в части varargs сигнатуры функции. Для аргумента buttonCount вам необходимо передать общее количество состояний кнопок, которые вы передаете, включая левую кнопку.

Следующая последовательность должна размещать событие мыши вниз, за ​​которым следует событие мыши для правой кнопки мыши.

CGPostMouseEvent(pt, 1, 2, 0, 1); 
CGPostMouseEvent(pt, 1, 2, 0, 0); 

Тем не менее, CGPostMouseEvent устарел в течение некоторого времени. Его замена, CGEventCreateMouseEvent в сочетании с CGEventPost, проста в использовании.

+0

большое спасибо! – hotPocket

Смежные вопросы