Я программно генерирую щелчки мышью, когда пользователь нажимает определенную клавишу клавиатуры (CapsLock).
Поэтому я делаю левую кнопку мыши, когда CapsLock включен, затем левую кнопку мыши, когда CapsLock выключен.
Это ведет себя правильно, если я, например, наведу указатель мыши на строку заголовка окна, нажмите CapsLock, затем переместите мышь, затем нажмите CapsLock, окно будет правильно перемещено. то есть я правильно «перетаскиваю» окно так, как будто я удерживал левую кнопку мыши, одновременно перемещая мышь.
Однако есть одна проблема - окно не перемещается, пока я двигаю мышь, оно перемещается в конечную позицию только после того, как я нажму CapsLock во второй раз. то есть после того, как я «отпустил» кнопку мыши.
Что мне нужно сделать, чтобы экран обновлялся при перемещении мыши?
Интересно, я тоже подсел на
[NSEvent addGlobalMonitorForEventsMatchingMask: NSLeftMouseDraggedMask
и обнаружил, что мой оператор NSLog выводит только после Я отпустил левую кнопку мыши (настоящая левая кнопка мыши)
Ниже приведен код щелчка мыши, при необходимости я могу опубликовать весь код, его не так много ..
// simulate mouse down
// get current mouse pos
CGEventRef ourEvent = CGEventCreate(NULL);
CGPoint point = CGEventGetLocation(ourEvent);
NSLog(@"Location? x= %f, y = %f", (float)point.x, (float)point.y);
CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
CGEventRef theEvent = CGEventCreateMouseEvent(source, kCGEventLeftMouseDown, point, kCGMouseButtonLeft);
CGEventSetType(theEvent, kCGEventLeftMouseDown);
CGEventPost(kCGHIDEventTap, theEvent);
CFRelease(theEvent);
// simulate mouse up
// get current mouse pos
CGEventRef ourEvent = CGEventCreate(NULL);
CGPoint point = CGEventGetLocation(ourEvent);
NSLog(@"Location? x= %f, y = %f", (float)point.x, (float)point.y);
CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateCombinedSessionState);
CGEventRef theEvent = CGEventCreateMouseEvent(source, kCGEventLeftMouseUp, point, kCGMouseButtonLeft);
CGEventSetType(theEvent, kCGEventLeftMouseUp);
CGEventPost(kCGHIDEventTap, theEvent);
CFRelease(theEvent);