Qt::Native::Status sendNativeMouseButtonEvent_Quartz(const QNativeMouseButtonEvent &event) { CGPoint pos; pos.x = event.globalPos.x(); pos.y = event.globalPos.y(); CGEventType type = kCGEventNull; if (event.button == Qt::LeftButton) type = (event.clickCount > 0) ? kCGEventLeftMouseDown : kCGEventLeftMouseUp; else if (event.button == Qt::RightButton) type = (event.clickCount > 0) ? kCGEventRightMouseDown : kCGEventRightMouseUp; else type = (event.clickCount > 0) ? kCGEventOtherMouseDown : kCGEventOtherMouseUp; // The mouseButton argument to CGEventCreateMouseEvent() is ignored unless the type // is kCGEventOtherSomething, so defaulting to kCGMouseButtonLeft is fine. CGMouseButton mouseButton = (type == kCGEventOtherMouseDown || type == kCGEventOtherMouseUp) ? kCGMouseButtonCenter : kCGMouseButtonLeft; CGEventRef e = CGEventCreateMouseEvent(0, type, pos, mouseButton); setModifiersFromQNativeEvent(e, event); CGEventSetIntegerValueField(e, kCGMouseEventClickState, event.clickCount); CGEventPost(kCGHIDEventTap, e); CFRelease(e); return Qt::Native::Success; }
bool GTMouseDriver::doubleClick() { QPoint mousePos = QCursor::pos(); CGEventType eventTypeMouseDown = kCGEventLeftMouseDown ; CGEventRef eventPress = CGEventCreateMouseEvent(NULL, eventTypeMouseDown, CGPointMake(mousePos.x(), mousePos.y()), 0 /*ignored*/); DRIVER_CHECK(eventPress != NULL, "Can't create event"); CGEventType eventTypeMouseUp = kCGEventLeftMouseUp ; CGEventRef eventRelease = CGEventCreateMouseEvent(NULL, eventTypeMouseUp, CGPointMake(mousePos.x(), mousePos.y()), 0 /*ignored*/); DRIVER_CHECK(eventRelease != NULL, "Can't create event"); CGEventPost(kCGSessionEventTap, eventPress); GTGlobals::sleep(0); // don't touch, it's Mac's magic CGEventPost(kCGSessionEventTap, eventRelease); GTGlobals::sleep(0); CGEventSetDoubleValueField(eventPress, kCGMouseEventClickState, 2); CGEventSetDoubleValueField(eventRelease, kCGMouseEventClickState, 2); CGEventPost(kCGSessionEventTap, eventPress); GTGlobals::sleep(0); // don't touch, it's Mac's magic CGEventPost(kCGSessionEventTap, eventRelease); GTGlobals::sleep(0); GTGlobals::sleep(100); CFRelease(eventPress); CFRelease(eventRelease); return true; }
void XInputSimulatorImplMacOs::mouseMoveRelative(int x, int y) { int newX = this->currentX + x; int newY = this->currentY + y; if(newX < 0 || newX > this->displayX || newY < 0 || newY > this->displayY ) { std::cout << "mouse moved beyound screensize." << std::endl; return; } std::cout << "newx: " << newX << " newy: " << newY << std::endl; CGEventRef mouseEv = CGEventCreateMouseEvent( NULL, kCGEventMouseMoved, CGPointMake(newX, newY), kCGMouseButtonLeft); CGEventPost(kCGHIDEventTap, mouseEv); CFRelease(mouseEv); this->currentX = newX; this->currentY = newY; }
bool wxUIActionSimulator::MouseDblClick(int button) { CGEventType downtype = CGEventTypeForMouseButton(button, true); CGEventType uptype = CGEventTypeForMouseButton(button, false); wxCFRef<CGEventRef> event( CGEventCreateMouseEvent(NULL, downtype, GetMousePosition(), CGButtonForMouseButton(button))); if ( !event ) return false; CGEventSetType(event,downtype); CGEventPost(tap, event); CGEventSetType(event, uptype); CGEventPost(tap, event); CGEventSetIntegerValueField(event, kCGMouseEventClickState, 2); CGEventSetType(event, downtype); CGEventPost(tap, event); CGEventSetType(event, uptype); CGEventPost(tap, event); wxCFEventLoop* loop = dynamic_cast<wxCFEventLoop*>(wxEventLoop::GetActive()); if (loop) loop->SetShouldWaitForEvent(true); return true; }
/** * Move the mouse to a specific point. * @param point The coordinates to move the mouse to (x, y). */ void moveMouse(MMPoint point) { #if defined(IS_MACOSX) CGEventRef move = CGEventCreateMouseEvent(NULL, kCGEventMouseMoved, CGPointFromMMPoint(point), kCGMouseButtonLeft); calculateDeltas(&move, point); CGEventPost(kCGSessionEventTap, move); CFRelease(move); #elif defined(USE_X11) Display *display = XGetMainDisplay(); XWarpPointer(display, None, DefaultRootWindow(display), 0, 0, 0, 0, point.x, point.y); XSync(display, false); #elif defined(IS_WINDOWS) //Mouse motion is now done using SendInput with MOUSEINPUT. We use Absolute mouse positioning #define MOUSE_COORD_TO_ABS(coord, width_or_height) (((65536 * coord) / width_or_height) + (coord < 0 ? -1 : 1)) point.x = MOUSE_COORD_TO_ABS(point.x, GetSystemMetrics(SM_CXSCREEN)); point.y = MOUSE_COORD_TO_ABS(point.y, GetSystemMetrics(SM_CYSCREEN)); INPUT mouseInput; mouseInput.type = INPUT_MOUSE; mouseInput.mi.dx = point.x; mouseInput.mi.dy = point.y; mouseInput.mi.dwFlags = MOUSEEVENTF_ABSOLUTE | MOUSEEVENTF_MOVE; mouseInput.mi.time = 0; //System will provide the timestamp mouseInput.mi.dwExtraInfo = 0; mouseInput.mi.mouseData = 0; SendInput(1, &mouseInput, sizeof(mouseInput)); #endif }
bool MouseMac::moveMouseTo(int x, int y) { UInt32 maxDisplays = 4; CGDirectDisplayID displayID[maxDisplays]; CGDisplayCount c = 0; CGDisplayCount *count = &c; CGGetDisplaysWithPoint( CGPointMake(x, y), maxDisplays, displayID, count); if (*count > 0) { CGEventRef mouseEv = CGEventCreateMouseEvent( NULL, kCGEventMouseMoved, CGPointMake(x, y), kCGMouseButtonLeft); CGEventPost(kCGHIDEventTap, mouseEv); CFRelease(mouseEv); return true; } else { return false; } }
/** * Special function for sending double clicks, needed for Mac OS X. * @param button Button to click. */ void doubleClick(MMMouseButton button) { #if defined(IS_MACOSX) /* Double click for Mac. */ const CGPoint currentPos = CGPointFromMMPoint(getMousePos()); const CGEventType mouseTypeDown = MMMouseToCGEventType(true, button); const CGEventType mouseTypeUP = MMMouseToCGEventType(false, button); CGEventRef event = CGEventCreateMouseEvent(NULL, mouseTypeDown, currentPos, kCGMouseButtonLeft); /* Set event to double click. */ CGEventSetIntegerValueField(event, kCGMouseEventClickState, 2); CGEventPost(kCGHIDEventTap, event); CGEventSetType(event, mouseTypeUP); CGEventPost(kCGHIDEventTap, event); CFRelease(event); #else /* Double click for everything else. */ clickMouse(button); microsleep(200); clickMouse(button); #endif }
void mouseup(char btn) { CGEventType eventType; CGMouseButton button; switch (btn) { case 'l': eventType = kCGEventLeftMouseDown; button = kCGMouseButtonLeft; break; case 'r': eventType = kCGEventRightMouseDown; button = kCGMouseButtonRight; break; case 'm': eventType = kCGEventOtherMouseDown; button = kCGMouseButtonCenter; break; default: eventType = kCGEventNull; break; } if (eventType != kCGEventNull) { CGEventRef event = CGEventCreateMouseEvent(NULL, eventType, mousePos(), button); CGEventPost(kCGHIDEventTap, event); CFRelease(event); } }
int main() { int keyCode = 49; //space bar srand ( time(NULL) ); printf("User input coming in 30 seconds\n"); sleep(27); printf("3...\n"); sleep(1); printf("2...\n"); sleep(1); printf("1...\n"); sleep(1); printf("NOW!"); while(1){ CGEventRef ourEvent = CGEventCreate(NULL); CGPoint point = CGEventGetLocation(ourEvent); CGEventRef click1_down = CGEventCreateMouseEvent( NULL, kCGEventLeftMouseDown, point, kCGMouseButtonLeft ); CGEventRef click1_up = CGEventCreateMouseEvent( NULL, kCGEventLeftMouseUp, point, kCGMouseButtonLeft ); CGEventPost(kCGHIDEventTap, click1_down); sleep(0.11); CGEventPost(kCGHIDEventTap, click1_up); CFRelease(click1_up); CFRelease(click1_down); CFRelease(ourEvent); sleep(0.89); if(rand() % 100 <= 2){ //2% chance CGEventRef e = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)keyCode, true); CGEventPost(kCGSessionEventTap, e); CFRelease(e); e = CGEventCreateKeyboardEvent (NULL, (CGKeyCode)keyCode, false); CGEventPost(kCGSessionEventTap, e); CFRelease(e); } sleep(9); } }
void MouseMove (int x, int y) { CGEventRef move = CGEventCreateMouseEvent( NULL, kCGEventMouseMoved, CGPointMake(x, y), kCGMouseButtonLeft // ignored ); CGEventPost(kCGHIDEventTap, move); CFRelease(move); }
void MouseUpRight () { CGEventRef mouse_down = CGEventCreateMouseEvent( NULL, kCGEventRightMouseUp, MousePos(), kCGMouseButtonLeft ); CGEventPost(kCGHIDEventTap, mouse_down); CFRelease(mouse_down); }
void MouseMac::rightMouseUp() { CGEventRef mouseEv = CGEventCreateMouseEvent( NULL, kCGEventRightMouseUp, getCursorPositionCGPoint(), kCGMouseButtonRight); CGEventPost(kCGHIDEventTap, mouseEv); CFRelease(mouseEv); }
void leftButtonPressed(int x, int y) { CGEventRef pressLeftButton = CGEventCreateMouseEvent( NULL, kCGEventLeftMouseDown, CGPointMake(x, y), kCGMouseButtonLeft ); CGEventPost(kCGHIDEventTap, pressLeftButton); CFRelease(pressLeftButton); }
void rightButtonReleased(int x, int y){ CGEventRef releaseRightButton = CGEventCreateMouseEvent( NULL, kCGEventRightMouseUp, CGPointMake(x, y), kCGMouseButtonRight ); CGEventPost(kCGHIDEventTap, releaseRightButton); CFRelease(releaseRightButton); }
void inputMouseMove(InputContext* ctx, int mouseLButtonState, int x, int y) { CGEventRef mouseMove = CGEventCreateMouseEvent( NULL, mouseLButtonState == MOUSE_LBUTTON_DOWN ? kCGEventLeftMouseDragged : kCGEventMouseMoved, CGPointMake(x, y), kCGMouseButtonLeft // ignored ); CGEventPost(kCGHIDEventTap, mouseMove); CFRelease(mouseMove); }
void ActivateScreen(screen_info *Screen) { CGPoint CursorPos = GetCursorPos(); CGPoint ClickPos = CGPointMake(Screen->X, Screen->Y); CGEventRef MoveEvent = CGEventCreateMouseEvent(NULL, kCGEventLeftMouseDown, ClickPos, kCGMouseButtonLeft); CGEventSetFlags(MoveEvent, 0); CGEventPost(kCGHIDEventTap, MoveEvent); CFRelease(MoveEvent); MoveEvent = CGEventCreateMouseEvent(NULL, kCGEventLeftMouseUp, ClickPos, kCGMouseButtonLeft); CGEventSetFlags(MoveEvent, 0); CGEventPost(kCGHIDEventTap, MoveEvent); CFRelease(MoveEvent); MoveEvent = CGEventCreateMouseEvent(NULL, kCGEventMouseMoved, CursorPos, kCGMouseButtonLeft); CGEventSetFlags(MoveEvent, 0); CGEventPost(kCGHIDEventTap, MoveEvent); CFRelease(MoveEvent); }
//TODO use the button from parameter list void XInputSimulatorImplMacOs::mouseUp(int button) { CGEventRef mouseEv = CGEventCreateMouseEvent( NULL, kCGEventLeftMouseUp, CGPointMake(this->currentX, this->currentY), kCGMouseButtonLeft); // use int buttn from parameter CGEventPost(kCGHIDEventTap, mouseEv); CFRelease(mouseEv); }
static inline void SendRightDown() { CGPoint point = GetMouseLoc(); CGEventRef click = CGEventCreateMouseEvent( NULL, kCGEventRightMouseDown, CGPointMake(point.x, point.y), kCGMouseButtonRight ); CGEventPost(kCGHIDEventTap, click); CFRelease(click); }
void inputMouseUp(InputContext* ctx, int x, int y) { CGDisplayShowCursor(kCGDirectMainDisplay); CGEventRef mouseUp = CGEventCreateMouseEvent( NULL, kCGEventLeftMouseUp, CGPointMake(x, y), kCGMouseButtonLeft ); CGEventPost(kCGHIDEventTap, mouseUp); CFRelease(mouseUp); }
static inline void SendLeftUp() { CGPoint point = GetMouseLoc(); CGEventRef click = CGEventCreateMouseEvent( NULL, kCGEventLeftMouseUp, CGPointMake(point.x, point.y), kCGMouseButtonLeft ); CGEventPost(kCGHIDEventTap, click); CFRelease(click); }
Qt::Native::Status sendNativeMouseMoveEvent_Quartz(const QNativeMouseMoveEvent &event) { CGPoint pos; pos.x = event.globalPos.x(); pos.y = event.globalPos.y(); CGEventRef e = CGEventCreateMouseEvent(0, kCGEventMouseMoved, pos, 0); setModifiersFromQNativeEvent(e, event); CGEventPost(kCGHIDEventTap, e); CFRelease(e); return Qt::Native::Success; }
void MouseMac::leftMouseUp(bool isDoubleClick) { CGEventRef mouseEv = CGEventCreateMouseEvent( NULL, kCGEventLeftMouseUp, getCursorPositionCGPoint(), kCGMouseButtonLeft); if (isDoubleClick) { CGEventSetIntegerValueField(mouseEv, kCGMouseEventClickState, 2); } CGEventPost(kCGHIDEventTap, mouseEv); CFRelease(mouseEv); }
void MouseTool::WarpPointer(float x, float y){ #ifdef __APPLE__ CGEventRef event = CGEventCreateMouseEvent(NULL, kCGEventMouseMoved, CGPointMake(x,y), 0); CGEventPost(kCGHIDEventTap, event); CFRelease(event); #elif __WIN32__ SetCursorPos(x, y); #else XWarpPointer(dpy, None, root_window, 0,0,0,0, x, y); XFlush(dpy); #endif }
bool wxUIActionSimulator::MouseDown(int button) { CGEventType type = CGEventTypeForMouseButton(button, true); wxCFRef<CGEventRef> event( CGEventCreateMouseEvent(NULL, type, GetMousePosition(), button)); if ( !event ) return false; CGEventSetType(event, type); CGEventPost(tap, event); return true; }
void MacRobot::doClick(const QPoint &pos, int msDelay) const { auto global = this->getWidget()->mapToGlobal(pos); qDebug() << global; CGEventRef down = CGEventCreateMouseEvent(NULL, kCGEventLeftMouseDown, CGPointMake(global.x(), global.y()), kCGMouseButtonLeft); CGEventRef up = CGEventCreateMouseEvent(NULL, kCGEventLeftMouseUp, CGPointMake(global.x(), global.y()), kCGMouseButtonLeft); if (msDelay > 0) { QEventLoop wait; QTimer::singleShot(msDelay, &wait, SLOT(quit())); wait.exec(); } CGEventPost(kCGHIDEventTap, down); if (msDelay > 0) { QEventLoop wait; QTimer::singleShot(msDelay, &wait, SLOT(quit())); wait.exec(); } CGEventPost(kCGHIDEventTap, up); CFRelease(down); CFRelease(up); }
void dragMouse(MMPoint point, const MMMouseButton button) { #if defined(IS_MACOSX) const CGEventType dragType = MMMouseDragToCGEventType(button); CGEventRef drag = CGEventCreateMouseEvent(NULL, dragType, CGPointFromMMPoint(point), (CGMouseButton)button); calculateDeltas(&drag, point); CGEventPost(kCGSessionEventTap, drag); CFRelease(drag); #else moveMouse(point); #endif }
void mouseControl::leftMouseDragged(ofPoint myMouse){ mouseCursorPosition.x = myMouse.x; mouseCursorPosition.y = myMouse.y; #ifdef TARGET_OSX CGMouseButton mouseButton = kCGMouseButtonLeft; mouseEventLeftDragged = CGEventCreateMouseEvent ( CGEventSourceCreate(NULL), eventTypeLeftDragged, mouseCursorPosition, kCGMouseButtonLeft ); CGEventSetType(mouseEventLeftDragged, kCGEventLeftMouseDragged); // Fix Apple Bug CGEventPost( kCGSessionEventTap, mouseEventLeftDragged ); #endif draggingLeftButton = true; }
void mouseControl::rightButtonDown(ofPoint myMouse){ mouseCursorPosition.x = myMouse.x; mouseCursorPosition.y = myMouse.y; #ifdef TARGET_OSX CGMouseButton mouseButton = kCGMouseButtonRight; mouseEventRightDown = CGEventCreateMouseEvent ( CGEventSourceCreate(NULL), eventTypeRightMouseDown, mouseCursorPosition, kCGMouseButtonRight ); CGEventSetType(mouseEventRightDown, kCGEventRightMouseDown); // Fix Apple Bug CGEventPost( kCGSessionEventTap, mouseEventRightDown ); CFRelease(mouseEventRightDown); #endif mRightButton = true; }
bool GTMouseDriver::press(Qt::MouseButton button) { bp |= button; QPoint mousePos = QCursor::pos(); CGEventType eventType = button == Qt::LeftButton ? kCGEventLeftMouseDown : button == Qt::RightButton ? kCGEventRightMouseDown: button == Qt::MidButton ? kCGEventOtherMouseDown : kCGEventNull; CGEventRef event = CGEventCreateMouseEvent(NULL, eventType, CGPointMake(mousePos.x(), mousePos.y()), 0 /*ignored*/); DRIVER_CHECK(event != NULL, "Can't create event"); CGEventPost(kCGSessionEventTap, event); GTGlobals::sleep(0); // don't touch, it's Mac's magic CFRelease(event); return true; }
void COSXScreen::postMouseEvent(CGPoint& pos) const { // check if cursor position is valid on the client display configuration // [email protected] CGDisplayCount displayCount = 0; CGGetDisplaysWithPoint(pos, 0, NULL, &displayCount); if (displayCount == 0) { // cursor position invalid - clamp to bounds of last valid display. // find the last valid display using the last cursor position. displayCount = 0; CGDirectDisplayID displayID; CGGetDisplaysWithPoint(CGPointMake(m_xCursor, m_yCursor), 1, &displayID, &displayCount); if (displayCount != 0) { CGRect displayRect = CGDisplayBounds(displayID); if (pos.x < displayRect.origin.x) { pos.x = displayRect.origin.x; } else if (pos.x > displayRect.origin.x + displayRect.size.width - 1) { pos.x = displayRect.origin.x + displayRect.size.width - 1; } if (pos.y < displayRect.origin.y) { pos.y = displayRect.origin.y; } else if (pos.y > displayRect.origin.y + displayRect.size.height - 1) { pos.y = displayRect.origin.y + displayRect.size.height - 1; } } } CGEventType type = kCGEventMouseMoved; SInt8 button = m_buttonState.getFirstButtonDown(); if (button != -1) { MouseButtonEventMapType thisButtonType = MouseButtonEventMap[button]; type = thisButtonType[kMouseButtonDragged]; } CGEventRef event = CGEventCreateMouseEvent(NULL, type, pos, button); CGEventPost(kCGHIDEventTap, event); CFRelease(event); }