【发布时间】:2011-09-13 14:39:14
【问题描述】:
当用户单击某个键盘键 (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);
【问题讨论】:
-
您如何检索左大写锁定键的键事件?它的事件循环在哪里?
标签: cocoa events keyboard mouse