5

OS X のキーストロークの検出に問題があります。キーボードのキーが押されるたびに、キーダウンとキーリリースまたはキーアップを検出する必要があります。でアプリケーションのイベント処理チェーンをインターセプトする場合、これはかなり簡単です[ NSEvent addLocalMonitorForEventsMatchingMask: handler: ]。これにより、通常の印刷キーや、shift、ctrl、alt、および cmd キーの検出に使用できるNSEventさまざまなイベント タイプのを傍受して変更できます。実際、モディファイア フラグは Shift、Ctrl、Alt、および Cmd キーのキー アップとキー ダウンの両方で変化するため、 とを一緒にチェックすることで、これらのキーのキー アップおよびキー ダウン イベントとして使用できます。NSKeyUpNSKeyDownNSFlagsChangedNSFlagsChanged[NSEvent modifierFlags][NSEvent keyCode]

ただし、Capslock は異なります。capslock 修飾子は実際にはキーが押されたときにのみ機能するため、capslock を押すと、キーがNSFlagsChanged離されたときではなく、capslock が押されたときにのみ取得されます。andはNSKeyUpNSKeyDowncapslock、shift、ctrl などの修飾キーでは出力されません。

Capslockキーアップイベントを取得するための方法、おそらく低レベルのインターフェースを提案できますか? kqueuesなどを使用する必要がありますか?

4

1 に答える 1

3

IOHIDLib がこれを行う唯一の方法のようです。私 (または実際にはチームメイト) は IOHIDManager を使用してイベント コールバックを設定し、capslock のキーアップおよびキーダウン イベントを正常にインターセプトしました。

これのひどいところは、これが完全に Cocoa/CoreFoundation イベント ディスパッチ メカニズムの外にあることです。つまり、アプリケーションがフォーカスされていない場合でもイベントを取得できます。多くのウィンドウ管理とフォーカス検出を自分で行う必要があります。

しかし、それは機能します。

于 2014-03-09T19:18:18.683 に答える