2009-12-10 34 views
0

的Mac OS X 10.6 - 可可如何防止在其他應用程序中按下全局鍵盤快捷鍵時發出嗶聲?

我使用的是全球性事件監視器使用自定義的快捷鍵顯示狀態項菜單:

 
globalEventMonitor = [NSEvent addGlobalMonitorForEventsMatchingMask:NSKeyDownMask handler:^(NSEvent *event) 
{ 
    if ([event keyCode] == kVK_F12) 
    { 
     [self handleGlobalShortcut]; 
     // How to prevent system beep? 
    } 
}]; 
該解決方案是工作,但系統產生嗶聲每當時間用戶按下F12和 活動應用程序不響應此關鍵事件。

有什麼辦法可以防止每次使用全局快捷方式時活動應用程序發出嘟嘟聲?

回答

3

在您的活動監視器中,您需要激活您的應用程序,以便將收到關鍵事件。

[NSApp activateIgnoringOtherApps:YES]; 

否則,該事件將被傳遞給當前活動的應用程序(會發出嗶聲)。

編輯:它看起來像這樣行不通。

根據文檔「您不能修改或以其他方式阻止該事件被傳遞到其原始目標應用程序」

因此Snow Leopard的新addGlobalMonitorForEventsMatchingMask API不適合處理熱鍵。您將需要繼續使用舊的Carbon RegisterEventHotKey API。幸運的是,這個API與Snow Leopard上的64位Cocoa兼容。

+0

它是蜂鳴聲無論如何:)請你提供一些代碼行?謝謝! – Stream

+0

編輯我的答案。 – Darren

+0

感謝您的補充Darren。我將你的答案標記爲正確答案。應得的 :) – Stream

2

似乎不可能。蜂鳴聲是[NSResponder noResponderFor]的默認行爲。因此,應用程序會發出嘟嘟聲,除非它通過添加最後一個響應者來覆蓋該行爲,這在應用程序外部不太可行。

+0

所以,我們仍然需要碳: – Stream

相關問題