ウィンドウのキャプチャ – プログラミング – Home

ウィンドウのキャプチャ
 
通知
すべてクリア

[解決済] ウィンドウのキャプチャ


ぽにょ
 ぽにょ
(@ぽにょ)
ゲスト
結合: 16年前
投稿: 9
Topic starter  

はじめまして。
WindowsXP VC6.0にて開発しています。
数個のアプリケーションのウィンドウをキャプチャし、
縮小しボタンに貼り付けるプログラムを作成しています。
http://www.codeproject.com/KB/graphics/screencapture.aspx
これを参考になんとかキャプチャはできたのですが、
ウィンドウの一部(全部)が隠れていたりした場合、目的外の
画像となってしまいます。
使用方法として、アプリケーションが最小化されたときに
ShowWindow( SW_HIDE )し、1秒ごとにウィンドウ状態をキャプチャし
ボタンに貼り付ける。
また、ボタンがクリックされたときに最大化するようなことがしたいの
です。
何か良き方法はないでしょうか?
ご教授願います。


引用未解決
トピックタグ
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

質問がよくわかりません。
箇条書きにしてみてください。

わかるとこだけ回答しとくと
「デスクトップ外の部分を持つウインドウの
全体画像をクリップボード経由で取得することはできません。」
ただし、そのアプリケーションが全体画像をクリップボードに
コピーする機能を持っている場合を除く。


返信引用
ぽにょ
 ぽにょ
(@ぽにょ)
ゲスト
結合: 16年前
投稿: 9
Topic starter  

質問がわかり難くて申し訳ありません。

単純にウィンドウを持つアプリケーションをキャプチャしたい。
・アクティブでなくてもキャプチャする。
・アイコン化されていてもキャプチャする。
・部分的に隠れていても全てをキャプチャする。
・ShowWindow( SW_HIDE )されていてもキャプチャする。

アプリケーションがどんな状態であろうと、キャプチャをしたいのです。

よろしくお願いします。


返信引用
仲澤@失業者
(@uncle_kei)
Prominent Member
結合: 5年前
投稿: 828
 

>・アクティブでなくてもキャプチャする。
デスクトップの当該ウインドウ部分を切り取る。
方法で、できる。ルナの場合上端の角部分のトリミングが必要

>・アイコン化されていてもキャプチャする。
できない。

>・部分的に隠れていても全てをキャプチャする。
できない。隠れている部分は画像にならない。

>・ShowWindow( SW_HIDE )されていてもキャプチャする。
できない。


返信引用
ぽにょ
 ぽにょ
(@ぽにょ)
ゲスト
結合: 16年前
投稿: 9
Topic starter  

早速の回答、ありがとうございます。

単純にはできないから質問したのですが...
自分になりに調べてみると、
SetLayeredWindowAttributesで透明にし最前面かつ
ウィンドウ位置を(0,0)に移動させる方法でなんとか
できそうな気配です。(一瞬チラつきますが)

もっと良い方法があれば良いのですが。


返信引用
rin
 rin
(@rin)
ゲスト
結合: 18年前
投稿: 112
 

>SetLayeredWindowAttributesで透明にし最前面かつ
>ウィンドウ位置を(0,0)に移動させる方法でなんとか
透明な画像(下にあるデスクトップやら別のアプリ)が
キャプチャされるだけじゃないのかな?

アイコン化、HIDE状態などであっても
「ユーザーの見える形にはしてないだけで、
 どっかに完全な状態の表示内容がデータとして
 OSあたりが隠し持ってるはず」
と確信して話をしてるようですが
そのような情報があったのでしょうか?

もしあれば教えてもらえますでしょうか?
それがわかれば、
それを取得するという方向で話を進めることができると思います


返信引用
Ban
 Ban
(@ban)
Prominent Member
結合: 5年前
投稿: 776
 

描画対象になってない部分は基本的に描画されませんので、
無理やりにでも描画対象にするようにしてあげるしかないわけですが、

…まぁ、世の中には、自分の状態をわざわざ(or意図的に?)保持していて、
勝手に替えると不整合になるアプリとか、
ビデオオーバレイ表示してるアプリとかもありますので、
完全解ってのは多分ないと思います。

ということで、アプリにもよるんでしょうが、
例えばBeginPaintをフックしたり
WM_PAINTを無理やり送り込んだりすれば多分、
WM_PAINTの描画処理自体で状態判断とかしていない限りは絵が取れるのでは?
# 前述のように、それでもなお取れないアプリは存在するでしょうが。


返信引用
wclrp ( 'o')
 wclrp ( 'o')
(@wclrp ( 'o'))
ゲスト
結合: 18年前
投稿: 287
 

昔ちょっと遊んでみてうまく実現できなかった覚えがあるがWM_PRINT

PrintWindow手のがあるようですね


返信引用
ぽにょ
 ぽにょ
(@ぽにょ)
ゲスト
結合: 16年前
投稿: 9
Topic starter  

仲澤@失業者様
rin様
Ban様
wclrp ( 'o')様
返答ありがとうございます。

PrintWindow()がベストなようです。
アイコンされてしまったものは、そのままキャプチャできませんが、
アイコン化せず、ディスプレイの場外に移動させればキャプチャできる
ことが確認できましたので、その方法で進めたいと思います。

いろいろとありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました