複数のサブウィンドウ(ツールウィンドウ)もスクショ、Pixcren
Pixcren1.3.9
変更点
複数のサブウィンドウ(ツールウィンドウとか)があるアプリのスクショもできるようにした
複数のツールウィンドウを広げたFireAlpacaをスクショしてみる
デスクトップ画面がこの状態で、Pixcrenの設定は
キャプチャ範囲をウィンドウ特殊1+(With関連ウィンドウ)でスクショ
新旧バージョンで比較
今回の1.3.9ではすべてのツールウィンドウを含めてスクショできる
実際に保存された画像ファイル
ダウンロード先
github.com
Pixcren1.3.9.zipがそれ
作成動作環境
- Windows 10 Home バージョン 2004
- Visual Studio Community 2019
- WPF
- C#
- .NET 5
動作に必要なのは.NET 5がインストール済みのWindowsで、.NET Frameworkだけでは動かないはず
今回とった方法
全部WinAPI使うのは以前と変わらない
paint.netも複数のサブウィンドウを持つアプリ
メインウィンドウが最前面ウィンドウだった場合は
GetForegroundWindowで取得できるのはメインウィンドウのpaint.netのウィンドウ、これは普通なんだけど、サブウィンドウの取得はGetWindowのPopupを使ったらできた、というか他の方法では取得できなかった、試したのはCHILEDウィンドウ、Next(下層ウィンドウ)、Prev(上層ウィンドウ)
で、Popupで取得されるのはサブウィンドウの中での最前面になっているウィンドウ、なので残りのサブウィンドウはそのNext(下層ウィンドウ)を辿っていけば取得できた
色、ツール、レイヤーウィンドウが取得されている、その他関係ないウィンドウも取得されるので、オーナーウィンドウがpaint.netのものだけを選別する
サブウィンドウが最前面だった場合
ここでは履歴ウィンドウが最前面だった場合、GetForegroundWindowで取得されるのは履歴ウィンドウ
ここから他のサブウィンドウの取得はGetWindowのNextで下層ウィンドウ群取得、まではさっきと同じなんだけど、選別に使うpaint.netのウィンドウの取得が違って、普通ならGetAncestorのRootウィンドウやRootOwnerウィンドウで取得できそうなんだけどこれができない!できたのは最前面ウィンドウにGetWindowのOwnerで辿って取得するって方法。
こんな感じでできた
関連記事
次回のWPF記事は2日後
次回のPixcrenは202日後
前回のPixcrenは5日前
最初のPixcrenは64日前
gogowaten.hatenablog.com