フローティングウィンドウ
フローティングウィンドウの機能はつきませんか?
@kingtosh 現在最前面に置かれているウィンドウを常に最前面に固定するという意図でしょうか? 一度それについては調査してみたことがあるんですが、NSWindow.Levelを外部から操作する術はあまりなさそうなんですよね。
そうですね。最前面固定です。top mostともいうようですが。 OS標準の方法では難しいようで、何かしかの拡張とかで実現してるみたいです。 これとかはどうでしょうか? Macにも対応してます。 Kalmat/PyWinCtl A cross-platform module for obtaining GUI information and control windows on screen https://github.com/Kalmat/PyWinCtl
@kingtosh PyWinCtlがMacにも対応しているというのは実際に動かしてみての結果でしょうか? ソースコードを見た限り、AppleScriptで制御しているようですが、最前面固定はできていないように見えます。
ここに簡単なレビューはあるんですが https://dev.classmethod.jp/articles/macbook-manipulating-windows-in-python-pywinctl/ フロントモスとは試してないですね・・・ あと、yabaiというコマンドアプリでできるのですが、Chromium系のブラウザがクラッシュしてしまったり・・・ https://github.com/koekeishiya/yabai AfloatXだとMacForgeが必要だったり、ショートカットやスクリプトに対応できなかったり・・・ https://github.com/jslegendre/AfloatX
@kingtosh
Yabaiのソースを見た感じ、OSXのPrivate Frameworkを使っている感じがしますね。SLSSetWindowLevel()あたりで最前面固定できるかもしれませんが、ググってもSLSというのがどのPrivate Frameworkなのか特定できず、使うのが怖いですね。
AfloatXを見た感じ、CoreGraphicsServicesというPrivate Frameworkを使ってウィンドウを制御していますね。 まぁ無理して非推奨な方法を使えば実現可能かもしれないという所感です。
調査、お疲れ様です。 YabaiもAfloatX(元のAfloatも)インジェクションスクリプトで無理やり動かしてるのは確かです。なのでAppStoreでの配布はできず、インストール時に一旦SIPを停止させる必要があったりします。 PyWinCtlはレビューのやり方を真似て”alwaysOnTop”をやってみると、エラーが出てダメでした。使い方を作者に問い合わせてみてるところです。 フローティングウインドウは、グラフィックス用途ではすごく便利で赤字修正だったり手本を見ながら作業なんて時に非常に楽になります。 実現できてるアプリはほとんどないしあっても画像化したものを表示するだけなんで、上手くできたらそれなりに評判になるのではと思います。