18

次のコードを使用して、マウスのクリックをシミュレートしています。

void PostMouseEvent(CGMouseButton button, CGEventType type, const CGPoint point) 
{
 CGEventRef theEvent = CGEventCreateMouseEvent(NULL, type, point, button);
 CGEventSetType(theEvent, type);
 CGEventPost(kCGHIDEventTap, theEvent);
 CFRelease(theEvent);
}

void LeftClick(const CGPoint point) 
{
 PostMouseEvent(kCGMouseButtonLeft, kCGEventMouseMoved, point);
 NSLog(@"Click!");
 PostMouseEvent(kCGMouseButtonLeft, kCGEventLeftMouseDown, point);
 PostMouseEvent(kCGMouseButtonLeft, kCGEventLeftMouseUp, point);
}

基本的に同じコードを使用して、以下を変更することでコントロールクリック(右クリック)を実行できます。

kCGEventLeftMouseDown

kCGEventLeftMouseUp

kCGMouseButtonLeft

それぞれの「正しい」イベントに。関数は次のようになります。

void RightClick(const CGPoint point) 
{
 PostMouseEvent(kCGMouseButtonRight, kCGEventMouseMoved, point);
 NSLog(@"Click Right");
 PostMouseEvent(kCGMouseButtonRight, kCGEventRightMouseDown, point);
 PostMouseEvent(kCGMouseButtonRight, kCGEventRightMouseUp, point);
}

しかし、ダブルクリックはどうですか?2回の左クリックを送信し、PostMouseEvent()を2回続けて呼び出してみましたが、うまくいきませんでした。ダブルクリックをどのように実行しますか?

ありがとう!

4

2 に答える 2

18

調べてくださいCGEventSetIntegerValueField(event, kCGMouseEventClickState, clickCount)。また、clickCountを2に設定した後でも、レガシーアプリの場合、場合によっては2つのイベントを実行する必要があります。

だから基本的に:

  1. イベントを作成する
  2. クリック数を2に設定します
  3. イベントタイプをmousedownに設定し、送信します
  4. イベントタイプをmouseupに設定し、送信します
  5. 3と4を繰り返す

編集:

void doubleClick(int clickCount) {
    CGEventRef theEvent = CGEventCreateMouseEvent(NULL, kCGEventLeftMouseDown, point, kCGMouseButtonLeft);  
    CGEventSetIntegerValueField(theEvent, kCGMouseEventClickState, clickCount);  
    CGEventPost(kCGHIDEventTap, theEvent);  
    CGEventSetType(theEvent, kCGEventLeftMouseUp);  
    CGEventPost(kCGHIDEventTap, theEvent);  
    CGEventSetType(theEvent, kCGEventLeftMouseDown);  
    CGEventPost(kCGHIDEventTap, theEvent);  
    CGEventSetType(theEvent, kCGEventLeftMouseUp); 
    CGEventPost(kCGHIDEventTap, theEvent); 
    CFRelease(theEvent); 
}
于 2009-09-27T14:19:52.730 に答える
4

これは、ダブルクリックをシミュレートするためのサンプルコードです。

CGEventRef theEvent = CGEventCreateMouseEvent(NULL, kCGEventLeftMouseDown, CGPointMake(x, y), kCGMouseButtonLeft);  
CGEventPost(kCGHIDEventTap, theEvent);  
CGEventSetType(theEvent, kCGEventLeftMouseUp);  
CGEventPost(kCGHIDEventTap, theEvent);  

CGEventSetIntegerValueField(theEvent, kCGMouseEventClickState, 2);

CGEventSetType(theEvent, kCGEventLeftMouseDown);  
CGEventPost(kCGHIDEventTap, theEvent);  

CGEventSetType(theEvent, kCGEventLeftMouseUp); 
CGEventPost(kCGHIDEventTap, theEvent); 

CFRelease(theEvent); 

CGEventSetIntegerValueField(theEvent, kCGMouseEventClickState, 2);これは、最初のダウン、アップクリックの後に続くことに注意してください。

于 2011-03-10T07:55:42.713 に答える