午後わてんのブログ

ベランダ菜園とWindows用アプリ作成(WPFとC#)

複数のサブウィンドウ(ツールウィンドウ)もスクショ、Pixcren

Pixcren1.3.9

変更点

複数のサブウィンドウ(ツールウィンドウとか)があるアプリのスクショもできるようにした


複数のツールウィンドウを広げたFireAlpacaをスクショしてみる

f:id:gogowaten:20210303095336p:plain
デスクトップ画面

デスクトップ画面がこの状態で、Pixcrenの設定は
キャプチャ範囲をウィンドウ特殊1+(With関連ウィンドウ)でスクショ

f:id:gogowaten:20210303095637p:plain
Pixcren設定画面

新旧バージョンで比較

f:id:gogowaten:20210303100102p:plain
新旧比較
今回の1.3.9ではすべてのツールウィンドウを含めてスクショできる

f:id:gogowaten:20210303100628p:plain
スクショ結果
実際に保存された画像ファイル


ダウンロード先

github.com Pixcren1.3.9.zipがそれ


作成動作環境

動作に必要なのは.NET 5がインストール済みのWindowsで、.NET Frameworkだけでは動かないはず


今回とった方法

全部WinAPI使うのは以前と変わらない

f:id:gogowaten:20210303113127p:plain
paint.netの場合
paint.netも複数のサブウィンドウを持つアプリ
メインウィンドウが最前面ウィンドウだった場合は
f:id:gogowaten:20210303113350p:plain
メインウィンドウが最前面だった場合
GetForegroundWindowで取得できるのはメインウィンドウのpaint.netのウィンドウ、これは普通なんだけど、サブウィンドウの取得はGetWindowのPopupを使ったらできた、というか他の方法では取得できなかった、試したのはCHILEDウィンドウ、Next(下層ウィンドウ)、Prev(上層ウィンドウ)
で、Popupで取得されるのはサブウィンドウの中での最前面になっているウィンドウ、なので残りのサブウィンドウはそのNext(下層ウィンドウ)を辿っていけば取得できた

f:id:gogowaten:20210303114151p:plain
Popupウィンドウの下層ウィンドウ群を取得したところ
f:id:gogowaten:20210303114240p:plain
下層ウィンドウ群
色、ツール、レイヤーウィンドウが取得されている、その他関係ないウィンドウも取得されるので、オーナーウィンドウがpaint.netのものだけを選別する


サブウィンドウが最前面だった場合

f:id:gogowaten:20210303114726p:plain
サブウィンドウが最前面だった場合
ここでは履歴ウィンドウが最前面だった場合、GetForegroundWindowで取得されるのは履歴ウィンドウ
ここから他のサブウィンドウの取得はGetWindowのNextで下層ウィンドウ群取得、まではさっきと同じなんだけど、選別に使うpaint.netのウィンドウの取得が違って、普通ならGetAncestorのRootウィンドウやRootOwnerウィンドウで取得できそうなんだけどこれができない!できたのは最前面ウィンドウにGetWindowのOwnerで辿って取得するって方法。
こんな感じでできた




関連記事

次回のWPF記事は2日後

gogowaten.hatenablog.com



次回のPixcrenは202日後


前回のPixcrenは5日前

gogowaten.hatenablog.com

最初のPixcrenは64日前
gogowaten.hatenablog.com