1

左上の拡大鏡ガラスです。

2つの方法を試しましたが、どちらも失敗しました。

  1. 拡大鏡のガラスをクリックしたら、新しいカーソル(拡大鏡のガラスの画像が表示されたカーソル、またはクロスフェアなど)を作成して押し 、イベントが発生するまですべてのイベントを食べるようnextEventMatchingMask:untilDate:inMode:dequeue:に呼び出します。それは機能しましたが、完全ではありません。クリックポイントが元のウィンドウの外にある場合、他のウィンドウまたはアプリが前面に並べられます。NSApplicationNSLeftMouseUp

  2. NSColorPanelを作成し、偽のマウスクリックイベントをパネルに送信してみてください。カラーホイールでは機能しますが、イベントの場所を拡大鏡のガラスボタンに変更すると効果がありません。

[1]の質問:ユーザーが左ボタンをクリックするまで、すべてのシステムマウスイベントのディスパッチを禁止するにはどうすればよいですか?

[2]の質問:これは可能ですか?

ご回答ありがとうございます。

4

1 に答える 1

3

システムイベントのディスパッチをブロックする場合は、Quartzイベントサービスを使用できますが、2つの問題があります。

  1. アクセシビリティはユーザーが有効にする必要があります。
  2. クォーツイベントサービスはサンドボックスの下で禁止されています。

方法1を成功させることは不可能です。

@CodaFiに触発されて、NSWindowのサブクラスを使用して実装することにしました。サンプルプロジェクトはgitbubhttps://github.com/wentingliu/ScreenPickerで作成されていますので、チェックしてください。

于 2013-03-30T08:51:21.210 に答える