問題タブ [nsevent]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
cocoa - NSEvent/CGEvent からのデバイス情報
私のアプリケーションは、イベント タップを使用してキーボード イベントをキャプチャします。各イベントがどのデバイス (つまり、どのキーボード) から発生したかを知りたいです。タップが取得する CGEvent とともに、デバイスを識別する情報のようなものはありますか? NSEvent のメソッドとさまざまな CGEventField キーを見てきましたが、どれもデバイス固有ではないようです。何か助けはありますか?
objective-c - クリックスルー ボタンとウィンドウを上げない
iTunes ミニプレーヤー (一例を挙げると) は、再生/一時停止および音量コントロールが使用されているときにアプリケーションが前面に表示されないクリックスルーをサポートしています。
これはどのように行われますか?
私はAppleのドキュメントを調べてきましたが、Cocoa Event-Handling GuideのEvent Dispatchに次のように記載されています。
一部のイベントは、その多くがアプリケーション キット (タイプ NSAppKitDefined) によって定義されており、ウィンドウまたはアプリケーション オブジェクト自体によって制御されるアクションと関係があります。これらのイベントの例としては、アプリケーションのアクティブ化、非アクティブ化、非表示、および表示に関連するイベントがあります。NSApp は、ディスパッチ ルーチンの早い段階でこれらのイベントを除外し、それ自体を処理します。
したがって、私の限られた理解 ( How an Event Enters a Cocoa, Application ) から、NSApplication をサブクラス化し、オーバーライド
- (void)sendEvent:(NSEvent *)theEvent
すると、すべてのマウスとキーボードのイベントをトラップする必要がありますが、それでもクリックするとウィンドウが表示されます。したがって、イベントが NSApplication によって表示される前にウィンドウが発生するか、何か他のものが不足しています。
Matt Gallagher のDemystifying NSApplication を再作成して調べましたが、残念ながら Matt はイベント キューをカバーしていませんでした。
どんな助けでも感謝します、ありがとう。
編集して追加: Loyd's Loungeで同じ問題について話している投稿を見つけ、CocoaBuilder の投稿にリンクし、最初の右マウス ダウンをキャプチャします。[theEvent type] の NSLog をいじって再アクティブ化した後、マウスの左ボタンのアクティビティがキャッチされています。
ここで、ウィンドウを左クリックして前面に出すと、一連のイベント タイプが生成13, 1, 13
されます。これらは、NSAppKitDefined、NSLeftMouseDown、および NSAppKitDefined です。これらを除外したり、どこに行くのかを見つけたりすることはできますか?
objective-c - keyUp イベントが聞こえましたか?: オーバーライドされた NSView メソッド
更新: 以下のようにファーストレスポンダに設定された NSView サブクラスから NSView keyUp メソッドをオーバーライドしていますが、それが呼び出されているという証拠はまだ見られません。
-- 元の投稿 -- 私は Cocoa と Obj-C を初めて使用し、(void)keyUp: を自分のコントローラー クラス (それ自体は NSController 型) の実装内から実行しようとしています。ただし、これを配置するのに適切な場所かどうかはわかりません。私は一連の同様のボタンをそれぞれ一意のキー相当 (IB ボタン属性) に設定し、それぞれが (IBAction)keyInput メソッドを呼び出して、各キーの ID を別のオブジェクトに渡します。これは問題なく動作しますが、各キーが離されたタイミングも追跡したいと考えています。
-- 元の [悪い] 例 --
失敗すると、ユーザー定義のkeyInputのように、keyUpを(voidではなく)IBActionとして試し、Interface Builderの適切なボタンに接続しましたが、keyUpはキーが押されていないときにのみ呼び出されました解放されたとき。(私はそれが起こるだろうと思っていました。)
申し訳ありませんが、このメソッドを別のクラスに配置するか、別の方法で行う必要がありますか? ただし、どこにいても、コントローラー クラスが所有するオブジェクトにアクセスできる必要があります。
あなたが持っているかもしれない洞察に感謝します。
cocoa - Cocoa の NSView は非常識な mouseDown イベントを取得しますか?
こんにちは - mouseDown でプログラムで移動する NSView サブクラスがあります。これは機能しますが、奇妙な副作用があります。
- サブビューをクリックします。サブビューが遠ざかる[GOOD]
- しばらく待ちます。マウスを動かしません。サブビューが移動したため、カーソルの下になくなりました。
- もう一度マウスをクリックします。
- 基になるウィンドウが mouseDown イベントを取得することを期待しています (サブビューがカーソルの下にないため)、ただし、サブビューは何らかの形でこのイベントを取得します[ODD]
- mouseDown イベントは、クリックがサブクラスの境界外にあったことを明確に示しています[ODD]
- mouseDown イベントも、マウス クリックの間隔を数秒間待ったにもかかわらず、クリック カウントが増加したことを明確に示しています[ODD]
...私が見ているものには説明が必要です。これが私のコードです。「OddMouse」という名前の新しい Cocoa アプリケーション プロジェクトを作成し、以下を OddMouseAppDelegate.h ファイルにコピーします。
...そして、以下を OddMouseAppDelegate.m ファイルに追加します。
[[window contentView] addSubview:[[OddView alloc] init]]; } @終わり
... ビルドしてから実行し、目撃します ! FWIW、コンソールに表示されるのは次のとおりです。
cocoa - 現在のマウス位置を保存 (および使用) する方法は?
現在のマウス位置を (システム全体で) 保存し、(後で) その保存されたポイントにマウスを置く最良の方法は何ですか?
[NSEvent mouseLocation]
位置を取得し、 でマウスを動かすことができますCGEventMouseMoved
が、それぞれ異なる座標系を使用しています (NSEvent の場合は y=0 が上で、CGEvent の場合は下であると思います)。
画面の高さをキャプチャし、それを使用して2つの間で変換することの堅牢性について心配しています-またはこれが最善のアプローチですか?
cocoa - NSStatusItem を右クリックします
私はNSStatusItem
アイテムを右クリックしてメニューをポップアップしたいと思っています。NSView をサブクラス化し、- (void)rightMouseDown:(NSEvent *)event
メソッドを上書きしました。- (void)mouseDown:(NSEvent *)event
モディファイアフラグを見るためにも実装しました。私の問題は、ビューがイベントを受信しないことNSRightMouseDown
です。そして、私は理由を知りませんか?このイベントを取得する方法はありますか? 当然ステータスアイテムにカスタムビューを追加しました。
- 更新 -
追加情報: カスタム ビューのサブビューに NSImageView を追加しました。
- UPDATE 2 -
追加情報:NSMenuDelegate
プロトコルに準拠しています。
objective-c - 別のアプリのウィンドウからマウスイベントを受信している間、別のアプリケーションのウィンドウをアクティブに保ちますか?
別の無関係なアプリへのフォーカスを維持しながら、アプリのウィンドウでキーボードやマウスのイベント(つまり、ユーザーがウィンドウのボタンをクリックする)を受信する方法はありますか?
[myWindow setLevel:NSPopUpMenuWindowLevel]を含め、さまざまなレベルでウィンドウを構成しようとしましたが、役に立ちませんでした。
cocoa - NSButtonMousedownイベント
ボタンのマウスダウンにポップアップメニューを表示しようとしています。ボタンは、マウスを押している間は押されているように見え、マウスを上に向けると、選択されているメニュー項目に関係なく「押されていない」状態になります。アプリケーションを追加するための[公開/スペース設定]パネルの[+]ボタンに似ています。
これまでに3つの方法を試しました。
ボタンがクリックされたときにアクションを送信しました。ただし、ここでは、ポップアップメニューがマウスダウンではなくマウスアップに表示されます
NSButtonをサブクラス化し、mouseDownを上書きします。ポップアップメニューがマウスダウンで表示され、任意のメニュー項目を選択できます。しかし、ポップアップメニューがなくなると、ボタンが押されたように見えました。したがって、同じアクションを再度実行する前に、もう一度クリックしてボタンを「押さない」ようにする必要があります。
NSEventaddLocalMonitorForEventsMatchingMask。2と同様の動作。
なにか提案を?方法2または3が正しい方法だと思います。マウスを上に向けて、ボタンを「押すのをやめる」必要があります。
cocoa - マウスが移動するまで NSEvent 修飾子フラグが更新されない
Mac OS X 10.6 では、現在押されているモディファイア フラグを決定するクラス メソッドがありますNSEvent
。+modifierFlags
10.5 では、[[NSApp currentEvent] modifierFlags]
マウスの移動後にのみ更新を使用します。修飾子フラグを非同期に取得する方法はありますか?
objective-c - NSMenu が開いている間にキー押下イベントをキャプチャする
a が開いている間にキーの押下をキャプチャすることに興味がNSMenu
あります。たとえば、メニューが開いているときにユーザーがキーボードの「e」または「1」を押した場合、特定のメッセージを送信します (できれば、押されたキーへの参照を含むイベント オブジェクトを渡します)。
代替メニューを調べましたが、オプション キーをキャプチャするためにしか使用できないという印象を受けました。
現在、私はカスタムビューを使用しておらず、NSStatusBar
(メニューが生成される場所) とNSMenu
.
私は Objective-C を初めて使用するので、言葉遣いが間違っていたら申し訳ありません。
助けてくれて本当にありがとう!