No.3ベストアンサー
- 回答日時:
GetForegroundWindowだとプログラムを起動するときにそこがアクティブになるので他のウィンドウは指定できないのでは。
とりあえず可視のウィンドウを片っ端から保存
BOOL CALLBACK EnumWndProc(HWND hWnd, LPARAM lParam)
{
WINDOWINFO wi;
char szWindowName[ 128 ];
wi.cbSize = sizeof(WINDOWINFO);
GetWindowInfo(hWnd, &wi);
if (wi.dwStyle & WS_VISIBLE) {
//ウィンドウを前面にして書き直させる
SetForegroundWindow(hWnd);
Sleep(100);
//ウィンドウクラス名をファイル名に
GetClassName( hWnd, szWindowName, sizeof(szWindowName) );
strcat(szWindowName, ".bmp");
SaveBitmap(hWnd, szWindowName);
}
return TRUE;
}
int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,PSTR lpCmdLine,int nCmdShow)
{
EnumWindows(EnumWndProc, 0);
return 0;
}
ご回答ありがとうございます。
ご教示の内容を試してみました。
結果として、可視のウィンドウを全て保存をしていますが、
画像を開けないもの?(白い四角の中に赤の×印)
もの(ウィンドクラス名はIEFrameとThundetRT6Main(調べたところVCで作ったものみたいですが))があります。
また、キャプチャしようとしたウィンドウに他のウィンドウが重なったまま(キャプチャプログラムを起動した際の状態の画像)キャプチャされています。(このウィンドクラス名はThundetRT6FormDC)
この方法で特定のウィンドウクラス名を知ることができましたが(キャプチャしたいウィンドウはVCで作られているアプリなので、おそらくは、ThundetRT6MainかThundetRT6FormDCです)上記のように余計なものが映っていたり、もしくは開けないので、この問題を解決し、
特定のウィンドウのみをキャプチャして保存する方法はないのでしょうか?
No.4
- 回答日時:
★アドバイス
>キャプチャプログラムを実行する際のウィンドウがアクティブになる
>問題を解決できるのでしょうか?
↑
プログラムを起動してキャプチャする仕組みだと無理でしたね。
ホットキーでキャプチャ・プログラムが実行されるタイプなら出来そうです。
でもこの仕組みではないのですよね。前質問より。
どんな仕組みでしょうか?
・クラス名が『ThunderRT6Main』とか、『ThunderRT6FormDC』は
マルチ・インスタンスのアプリケーションです。
エクセルのようなソフトはクラス名やタイトル名などを解析して
どの組み合わせでメインのウインドウのクラスになるか調べて下さい。
単純にすべてのアプリケーションに対応は難しいと思います。
>画像を開けないもの?(白い四角の中に赤の×印)
↑
この意味がちょっと分かりません。
>また、キャプチャしようとしたウィンドウに他のウィンドウが重なったまま…
↑
正しくウインドウ・ハンドルさえ取得できればSetForegroundWindow()関数で
前面に出してからSaveBitmap()関数を呼び出せば良いでしょう。
・それから『ThunderRT6Main』や『ThunderRT6FormDC』はVCではなくてVBか
Delphi言語で作成されたアプリケーションだと思います。
>特定のウィンドウのみをキャプチャして保存する方法はないのでしょうか?
↑
キャプチャ・プログラムを起動してからマウスをドラッグしてマウスの直下の
ウインドウ・ハンドルを取得する方法はどうでしょうか?
WindowFromPoint()関数など。
あるいはキャプチャ・プログラムを起動してアクティブにした後にマウスで
キャプチャしたいウインドウをクリックしてアクティブ・ウインドウが
切り替わったときにSaveBitmap()関数を呼ぶ方法とか。
参考URL:http://msdn.microsoft.com/ja-jp/library/cc364874 …
ご回答ありがとうございます。
いろいろ調べて、とりあえず、解決しました。
解決方法は、
キャプチャしたいのは特定のアプリのウィンドウ一つだけで、
そのウィンドウハンドルはThunderRT6FormDCのようです。
ですので、GetClassName関数をもちいて
順次開いているウィンドウハンドルを取得させ
strcmp関数を用いて、ThunderRT6FormDCと一致する時のみ
前面に表示させBMP形式で保存するようにしました。
>画像を開けないもの?(白い四角の中に赤の×印)
↑
>この意味がちょっと分かりません。
開くと、白い四角の中に赤の×印の画像が表示されたということです。
つまりはキャプチャできなかったと伝えたかったのですが、
分かりにくい表現となりました。
申し訳ありません。
>それから『ThunderRT6Main』や『ThunderRT6FormDC』はVCではなくて>VBかDelphi言語で作成されたアプリケーションだと思います。
調べたところ、ご指摘の通りでした。
No.2
- 回答日時:
★アドバイス
・そういう場合はGetForegroundWindow()関数はどうでしょうか?
このAPIは一番手前のアクティブ・ウインドウのハンドルを取得します。
特定のアプリケーションを前に持ってきてからキャプチャ・プログラムを
起動すれば任意のウインドウがキャプチャできます。
・特定のアプリケーションをタイトル名、クラス名などで検索するのであれば
FindWindow()やEnumWindows()やCreateToolhelp32Snapshot()などあります。
FindWindowEx()は子ウインドウを列挙しますのでGUIコントロールだけを
キャプチャするときに使えば良いでしょう。
ウインドウ全体ならFindWindow()です。
http://msdn.microsoft.com/ja-jp/library/cc364732 …
http://blog.goo.ne.jp/masaki_goo_2006/e/f4a960eb …
http://blog.goo.ne.jp/masaki_goo_2006/e/337be80c …
アドバイスありがとうございます。
この手法の場合、他の方のご回答中にもありますが、
特定のアプリケーションをキャプチャするには、
キャプチャプログラムを実行する際のウィンドウがアクティブになる
問題を解決できるのでしょうか?
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- Word(ワード) Microsoft Word2023で、修正箇所を表示させたい 1 2023/02/09 10:07
- UNIX・Linux ubuntu ウィンドウのバー ダブルクリック 巻き取る 1 2022/04/28 19:28
- その他(ソフトウェア) Figma 1 2023/06/23 14:22
- その他(OS) Windowsで大量の画像サイズを半自動で変更する方法 6 2023/02/17 08:45
- Visual Basic(VBA) 起動中のアプリ、ソフトの取得 3 2022/12/28 11:13
- その他(Microsoft Office) windows10で作業を終了する際の「保存しますか はい いいえ」を表示させずに自動で保存する方法 6 2023/03/15 11:29
- ノートパソコン EXCEL のドキュメントの回復について 2 2023/03/19 17:16
- Windows 10 2つのウィンドウ選択時の表示について 10 2023/07/25 08:48
- その他(プログラミング・Web制作) pythonで変数にオブジェクトを代入するにはどうしたらよいでしょうか 2 2023/08/20 20:36
- モニター・ディスプレイ パソコンでスクリーンショットしたもの(HP)を印刷しました。 3 2022/07/03 16:39
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
勝手にウィンドウが開いて止ま...
-
[VBA] UserForm を Excel の W...
-
EnumChildWindowsの使い方(VBA)
-
コンソールアプリケーションで...
-
API32 コントロールのEditテキ...
-
ExcelVBAでAPIを使って外部ウイ...
-
デスクトップにフォーカスを移動
-
アプリケーション間のドラッグ...
-
Excelの上下を固定したい
-
他のアプリケーションの終了処理
-
Ctrl+Cを2回押してもOfficeクリ...
-
UWSCで特定のChromeのタブをア...
-
ラジオボタンの初期指定
-
ACCESS2007で起動時にフォーム...
-
イベントを発生させたウィンド...
-
ダイアログをスクロールさせるには
-
作成したウインドウのサイズを...
-
指定したインアクティブウィン...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
エクセルで作った新しいウイン...
-
「アイテムは収集されました」...
-
勝手にウィンドウが開いて止ま...
-
検索の画面がでなくなってしま...
-
ゲームでは結局どっちが良いの?
-
VBA .Value=.Value ?
-
Excelの上下を固定したい
-
[VBA] UserForm を Excel の W...
-
EnumChildWindowsの使い方(VBA)
-
Vba LongPtrについて教えてくだ...
-
ExcelのBOOKが消えた!
-
他のアプリケーションの終了処理
-
ラジオボタンの初期指定
-
ExcelVBAでAPIを使って外部ウイ...
-
作成したウインドウのサイズを...
-
UWSCで特定のChromeのタブをア...
-
隠れたウィンドウの画面をキャ...
-
「&HFFFF」「&H1A」とは?
-
名前を付けて保存のウィンドウ...
-
最大化と最小化ボタン
おすすめ情報