當用戶單擊某個鍵盤鍵(CapsLock)時,我編程生成鼠標點擊。 因此,當CapsLock打開時,我會做一個鼠標左鍵,然後當CapsLock關閉時,向上鼠標左鍵。cocoa - CGEventPost鼠標點擊後不刷新屏幕
如果我將鼠標放在窗口標題欄上,單擊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);
你是如何檢索左鍵鎖定鍵的關鍵事件?它的事件循環在哪裏? – Huperniketes 2011-06-21 16:49:14