2013-07-21 45 views
10

我正在尋找一種方法來設計一個帶有修飾鍵的小面板(例如shift,command),並且必須有可能像虛擬鍵盤那樣點擊它。CGEventPost - 按住一個按鍵(shift)

我想它有這樣的行爲:

  • 點擊虛擬鍵(移)。
  • 換檔按鈕持有,並一直按下。
  • 用我的標準鍵盤輸入內容。
  • 點擊虛擬shift鍵上的另一個時間釋放它。

這裏是我使用的代碼:

CGEventSourceRef source = CGEventSourceCreate(kCGEventSourceStateHIDSystemState); 
CGEventRef shiftKeyDown = CGEventCreateKeyboardEvent(source, (CGKeyCode)56, YES); 
CGEventRef shiftKeyUp = CGEventCreateKeyboardEvent(source, (CGKeyCode)56, NO); 

CGEventPost(kCGAnnotatedSessionEventTap, shiftKeyDown); 
CGEventPost(kCGAnnotatedSessionEventTap, shiftKeyUp); 

CFRelease(shiftKeyUp); 
CFRelease(shiftKeyDown); 
CFRelease(source); 

我不能找到一種方法來保持按下狀態,直到我點擊它另一個時間。我雖然「按下按鈕」按鈕單元格類型是關鍵,但不幸的是沒有。 :-)

有幫助嗎?

在此先感謝。

+1

我有一個CGEventPost類似的問題,我試圖模擬修飾鍵按住,但我發現有趣的是,當我移動我的實際鼠標或按下我的實際鍵盤上的任何鍵時,這些修改鍵將被重置,證明通過檢查內置鍵盤查看器。你的情況是一樣的嗎? – Jerry

+0

你能解決這個問題嗎?我看到同樣的事情。 –

+0

有同樣的問題。 – aristidesfl

回答

0

這種方式被虛擬按下的換檔鍵,在後面跟隨一個不包含換檔標誌的事件時會自動釋放。這似乎是一個限制,或者可能是一個錯誤,考慮到文檔排序指示:https://developer.apple.com/reference/coregraphics/cgevent/1456564-init#discussion

我發現實現你要找的東西的唯一方法是設置一個事件監聽器,並添加移位標誌到每個應該由Shift鍵修改的事件。如何監聽鍵盤事件

例子:https://stackoverflow.com/a/31898592/1445812(SWIFT)如何有移動標誌

例截獲事件:

event?.flags.insert(.maskShift) 

希望這有助於。如果有人知道如何做到這一點,而不必爲每個事件添加標誌,請告訴。

+0

AppleScript:「告訴應用程序」系統事件「將鍵向下移動」和「告訴應用程序」系統事件「將鍵向上移動」。 – Willeke

+0

@Willeke意識到這一點,但你如何聽取applescript中的關鍵事件? – aristidesfl

+0

您不必聽,換檔鍵停下來。 – Willeke