質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

Q&A

2回答

3358閲覧

ウィンドウの後ろ側をキャプチャする方法(win10)

terataitai

総合スコア32

Windows 10

Windows 10は、マイクロソフト社がリリースしたOSです。Modern UIを標準画面にした8.1から、10では再びデスクトップ主体に戻され、UIも変更されています。PCやスマホ、タブレットなど様々なデバイスに幅広く対応していることが特徴です。

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

Win32 API

Win32 APIはMicrosoft Windowsの32bitプロセッサのOSで動作するAPIです。

C++

C++はC言語をもとにしてつくられた最もよく使われるマルチパラダイムプログラミング言語の1つです。オブジェクト指向、ジェネリック、命令型など広く対応しており、多目的に使用されています。

0グッド

1クリップ

投稿2019/02/23 14:08

作成ソフトのウィンドウの後ろ側をキャプチャする方法(win10)が知りたいです。
ウィンドウの後ろ側をキャプチャして、取得した画像の色をリアルタイムに変換して同じウィンドウに描画する処理をWPFやWinFormで書いてみたのですが、なかなかうまくいきません。

・一瞬画面上から消してからキャプチャする方法はリアルタイムの処理であることが理由で使えません。
・ウィンドウを気づかない範囲で半透明にして(opacity95%~98%でやりました)キャプチャしたあと、透けた奥の色を計算するやり方も試しましたが、計算の誤差が大きく、精確に後ろ側の色を計算することができませんでした。

できればC#(WPF)で開発したいですが、この問題の解決がしやすい言語やフレームワークやライブラリがあるなら、それを使用します。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

wwbQzhMkhhgEmhU

2019/02/23 20:00

現在ある回答を元にチラ見してきました。 UnityでVR機器からWindowを操作するソフトを作ってる方のソースの一部↓(ZuishinさんのDCのコピー) https://github.com/hecomi/uWindowCapture/blob/master/Plugins/uWindowCapture/uWindowCapture/WindowTexture.cpp(C++) OpenBroadcasterSoftwareという定番配信アプリのソースの一部↓(DirectXやOpenGLもDCもフルスクリーンもOK)(C/C++) https://github.com/obsproject/obs-studio/blob/master/plugins/win-capture/dc-capture.c https://github.com/obsproject/obs-studio/tree/master/plugins/win-capture/graphics-hook 個人的にはDCだけなら現実的ですが、DX系/GL系入れると死にそうです。WPFのコンポーネントへのC++側からの描画というのも、個人的にはやったことがないので要調査な感じで、いろいろハードルは高そうです。 C#(WPF)とか指定したり、フレームワークやライブラリを「使う」だけしか考えていないなら、いいライブラリでも見つけられない限り、DCも諦めるべきかと思います。
wwbQzhMkhhgEmhU

2019/02/23 20:11

あ、スクリーンショット的なキャプチャを意図しているのだったら、上記は忘れてください。 てっきりストリーミング的なキャプチャだと思ってました。
guest

回答2

0

Windows10 で後ろに回ったウィンドウをキャプチャするには DwmGetDxSharedSurface を使用することで可能です。DirectX の画面もキャプチャできますが、OpenGL 等の DirectX ではないアーキテクチャのウィンドウはキャプチャできません。さらに API 自体が非公開であるため、あんまり使用が推奨されません。

上記の問題が気にならないなら使用を検討してみてはどうでしょうか?サンプルはネットに転がっていますが、DirectX をヘッダインクルードするだけで使えるので実装は C++ がおすすめになりますね。

なお、序数で使用するサンプルがありますが、Windows 10 ではエクスポートテーブルに存在しているので、普通に GetProcAddress で取得できると思います。ダメなら Windows 10 での序数は 1732 ですね。

投稿2019/02/23 15:49

編集2019/02/23 15:51
atata0319

総合スコア881

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

GDI による描画ならそのウィンドウの DC を取得してコピーです。
DirectX による描画なら普通の方法では難しいと思います。
仮想マシンやリモートディスプレイを使えば可能かもしれません。
これだけ聞いて自分ですぐに実装方法がわかるくらいの技術が無いと無理だと思います。
自分の実現したい機能をすでに実現しているオープンソースのソフトがあればそれを参考にするのが早いかもしれません。

投稿2019/02/23 14:50

Zuishin

総合スコア28656

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問