• ベストアンサー

ウィンドウ名を知るには

いくつかのウィンドウ(Microsoft Internet Explorerやフォルダ、ワードなどの)を開いていて、それらの中で特定のウィンドウの名前を知る方法をご存じの方がいらっしゃれば、アドバイスいただきたいと思います。 何が目的かといいますと、指定したウィンドウの画面をキャプチャして保存するまでを一連で行うプログラムを作りたいので、指定するウィンドウの名前を知る必要があります。

  • ureo
  • お礼率91% (31/34)

質問者が選んだベストアンサー

  • ベストアンサー
  • php504
  • ベストアンサー率42% (926/2160)
回答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; }

ureo
質問者

お礼

ご回答ありがとうございます。 ご教示の内容を試してみました。 結果として、可視のウィンドウを全て保存をしていますが、 画像を開けないもの?(白い四角の中に赤の×印) もの(ウィンドクラス名はIEFrameとThundetRT6Main(調べたところVCで作ったものみたいですが))があります。 また、キャプチャしようとしたウィンドウに他のウィンドウが重なったまま(キャプチャプログラムを起動した際の状態の画像)キャプチャされています。(このウィンドクラス名はThundetRT6FormDC) この方法で特定のウィンドウクラス名を知ることができましたが(キャプチャしたいウィンドウはVCで作られているアプリなので、おそらくは、ThundetRT6MainかThundetRT6FormDCです)上記のように余計なものが映っていたり、もしくは開けないので、この問題を解決し、 特定のウィンドウのみをキャプチャして保存する方法はないのでしょうか?

その他の回答 (3)

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.4

★アドバイス >キャプチャプログラムを実行する際のウィンドウがアクティブになる >問題を解決できるのでしょうか?  ↑  プログラムを起動してキャプチャする仕組みだと無理でしたね。  ホットキーでキャプチャ・プログラムが実行されるタイプなら出来そうです。  でもこの仕組みではないのですよね。前質問より。  どんな仕組みでしょうか? ・クラス名が『ThunderRT6Main』とか、『ThunderRT6FormDC』は  マルチ・インスタンスのアプリケーションです。  エクセルのようなソフトはクラス名やタイトル名などを解析して  どの組み合わせでメインのウインドウのクラスになるか調べて下さい。  単純にすべてのアプリケーションに対応は難しいと思います。 >画像を開けないもの?(白い四角の中に赤の×印)  ↑  この意味がちょっと分かりません。 >また、キャプチャしようとしたウィンドウに他のウィンドウが重なったまま…  ↑  正しくウインドウ・ハンドルさえ取得できればSetForegroundWindow()関数で  前面に出してからSaveBitmap()関数を呼び出せば良いでしょう。 ・それから『ThunderRT6Main』や『ThunderRT6FormDC』はVCではなくてVBか  Delphi言語で作成されたアプリケーションだと思います。 >特定のウィンドウのみをキャプチャして保存する方法はないのでしょうか?  ↑  キャプチャ・プログラムを起動してからマウスをドラッグしてマウスの直下の  ウインドウ・ハンドルを取得する方法はどうでしょうか?  WindowFromPoint()関数など。  あるいはキャプチャ・プログラムを起動してアクティブにした後にマウスで  キャプチャしたいウインドウをクリックしてアクティブ・ウインドウが  切り替わったときにSaveBitmap()関数を呼ぶ方法とか。

参考URL:
http://msdn.microsoft.com/ja-jp/library/cc364874.aspx
ureo
質問者

お礼

ご回答ありがとうございます。 いろいろ調べて、とりあえず、解決しました。 解決方法は、 キャプチャしたいのは特定のアプリのウィンドウ一つだけで、 そのウィンドウハンドルはThunderRT6FormDCのようです。 ですので、GetClassName関数をもちいて 順次開いているウィンドウハンドルを取得させ strcmp関数を用いて、ThunderRT6FormDCと一致する時のみ 前面に表示させBMP形式で保存するようにしました。   >画像を開けないもの?(白い四角の中に赤の×印)  ↑  >この意味がちょっと分かりません。 開くと、白い四角の中に赤の×印の画像が表示されたということです。 つまりはキャプチャできなかったと伝えたかったのですが、 分かりにくい表現となりました。 申し訳ありません。 >それから『ThunderRT6Main』や『ThunderRT6FormDC』はVCではなくて>VBかDelphi言語で作成されたアプリケーションだと思います。 調べたところ、ご指摘の通りでした。

  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.2

★アドバイス ・そういう場合はGetForegroundWindow()関数はどうでしょうか?  このAPIは一番手前のアクティブ・ウインドウのハンドルを取得します。  特定のアプリケーションを前に持ってきてからキャプチャ・プログラムを  起動すれば任意のウインドウがキャプチャできます。 ・特定のアプリケーションをタイトル名、クラス名などで検索するのであれば  FindWindow()やEnumWindows()やCreateToolhelp32Snapshot()などあります。  FindWindowEx()は子ウインドウを列挙しますのでGUIコントロールだけを  キャプチャするときに使えば良いでしょう。  ウインドウ全体ならFindWindow()です。 http://msdn.microsoft.com/ja-jp/library/cc364732.aspx http://blog.goo.ne.jp/masaki_goo_2006/e/f4a960eba4c54fb573428acd57d61a44 http://blog.goo.ne.jp/masaki_goo_2006/e/337be80c82382e81e899bbda1b027217

ureo
質問者

お礼

アドバイスありがとうございます。 この手法の場合、他の方のご回答中にもありますが、 特定のアプリケーションをキャプチャするには、 キャプチャプログラムを実行する際のウィンドウがアクティブになる 問題を解決できるのでしょうか?

  • nda23
  • ベストアンサー率54% (777/1415)
回答No.1

「ウィンドウ名」とは何を指していますか? 必要なのはウィンドウ・ハンドルではありませんか? ウィンドウ・ハンドルの取得はFindWindowEx、EnumWindowsなど タイトルバーはGetWindowText、クラス名はGetClassNameを使います。

ureo
質問者

お礼

その通りでウィンドウ・ハンドルのことです。 適切な言葉を使わず、ご迷惑をおかけしました。 また、アドバイスありがとうございます。

関連するQ&A

  • ウィンドウ名からのウィンドウの指定

    ツールが実行中なのか、完了したのかを 調べる汎用的なモジュールを作りたいと思っています。 対象となるのは、たとえば、 特定のファイルの検索ツールに代表されるように、 実行中に画面が更新されるツールです。 ツールの実行を検知する方法として、 まず指定したウィンドウをキャプチャして、 指定秒数後のキャプチャと比較をしようと思っています。 (それとも一般に、指定したウィンドが実行中なのか  完了しているのか調べる方法というのがあるのでしょうか?) そこで、 画面のキャプチャーの方法はわかった http://www.atmarkit.co.jp/fdotnet/dotnettips/428screencapture/screencapture.html のですが、 ウィンドウの指定方法がわかりません。 ウィンドウは重複がないことを前提に ウィンドウ名で指定したいと思っています。 たとえば 「無題 - メモ帳」 だとか、 「Microsoft Excel - Book1」 といった具合にウィンドウのバーの部分に表示される文字です。 どうやら、ウィンドウ名から、ウィンドウを指定する、 汎用的なメソッドみたいのはないようなのですが、 どうすればよいのでしょうか? どうぞ教えていただければ大変幸いです。 よろしくお願いいたします。

  • windows7 すべてのプログラム

    OSはwindows7 Home Premiumです。 スタート→すべてのプログラムの名前の並び替えや名前の変更等の整理をしていましたら、プログラム名のファイル保存先フォルダーが、\Users\ユーザー\AppData\Roaming\Microsoft\Windows\スタートメニュー\プログラムと、ローカルディスクの隠しフォルダProgramData\Microsoft\Windows\スタートメニュー\プログラムに分かれて保存されております。両方ともデスクトップ上でのすべてのプログラムには反映されておりますが、本来の保存先はどちらが正しいのでしょうか。 現在のところよく分からないので、両方に同じファイルを置いておりますが、どちらかを削除したいと思っております。

  • ナビゲーションウィンドウが出ない

    エクセルやワード それ以外でもドキュメントなどを保存する際に今までは保存先を選べるようにエクスプローラが出ていたのですがまったくでなくなりました。整理⇒レイアウトの中にあるナビゲーションウィンドウのボタンを押しても何も反応しません。 保存以外の場面ではナビゲーションウィンドウは出ていますしボタンも反応します。 名前をつけて保存すると下記の画像のような保存画面になってしまいます。 今までのようにフォルダ参照などはできないのでとても不便です。 エクセルだけかと思いましたがワードでの名前をつけて保存時やダウンロードファイルのコピーの作成時にも同様の画面になってしまいます。 何かボタンを押してしまったかわかりませんが急に以前の画面を違ってしまいなおりません・・

  • Windows7の異常(お願いします)

    困っています。お教え下さい。 Windows7を三人のアカウントで利用していますが、一つのアカウントだけに異常が見られます。 スタートメニューから妙なのですが、「はじめに」、「Windows Mediacenter」、「電卓」、「付箋」から始まって「Microsoft Word 2010」、「すべてのプログラム」までが黒字に緑の妙な色合いになっています。 またInternet Explorerを起動しても画面が真っ暗です。 これは、いったいどういう現象で、また、どうすれば正常な状態に戻るのでしょうか? このアカウントには一切個人のファイルも保存していません。 以上のようなトラブルで困っています。 解決方法をお教え下さい。宜しくお願い申し上げます。(OSはW7です。)

  • Windows10 でのフォルダ名とテキスト

    Windows10 でのフォルダにはProgram Filesとかブランクが入る場合があります。一方でテキストでフォルダ名を指定する場面もあります(パス指定風のとき)。この場合、Program Filesとするのか、Program_Files とか"Program Files"とかそれなりに工夫するのでしょうか。これを指定する設定場面次第ということでしょうか。 また、フォルダ名が日本語だったり、英数字だったりすることがあります。どっちかが正しいのか、あるいはどちらでもいい(エイリアスとかリンク(ショートカット))ということなのでしょうか。テキストでフォルダを指定する場合、やはり疑問を感じるのですが。 いずれにしても確実にフォルダ名の指定が効いているという感じがしないのですが。うまくいかない原因の追究している時などです。よろしくお願いします。

  • Windows DVD

    Windows Vista利用です。 Microsoft Internet Explorer 7 からMicrosoft Internet Explorer 9にしたいのですが ダウンロードしてもエラーになり、Windows Updateの更新が必要とあり、 Windows Updateが出来ないプログラムがあります。 エラーコード80070490となり、試行錯誤してるのですが Windows DVD をコンピューターのディスク ドライブに挿入します。とありますが このWindows DVD がよくわかりません。 PCに付属品としてあるものなんですか? なかったのですが。 何をどう処理したらいいか全くわかりません。 PCはほぼ初心者なので、わかりやすく説明してくれる方おりますでしょうか。 宜しくお願いいたします。

  • windows7 名前を付けて保存について

    お世話になります。 昨日までそのようなことはなかったのですが、エクセルやワードで書類を作り「名前を付けて保存」を押すと、「上書き保存」画面が出てしまいます。 直し方をご存知の方は教えて下さい。 色々調べましたが、逆のパターン(上書き保存しようとすると名前を付けて保存画面がでてしまう)というのは結構あるようで、回答も沢山ありましたが、私のようなケースはまれなのでしょうか?回答が見つかりませんでした。 それから、今までは作業中のエクセルや、ワードで名前を付けて保存タブをクリックすると、作業中のエクセルファイルが入っているフォルダー画面が立ち上がるのですが、今は(上書き保存画面が立ち上がり、さらに)その画面に表示されるのがデスクトップ画面なので、いちいちフォルダーを探してクリックして、該当のファイルをクリックして保存する、という面倒な作業が増えてしまいまいした。 ※画像を添付してみました。(見えにくかったらすみません) 右の画像がエクセルやワードの作業の時に「名前を付けて保存」を押すと出てしまう画面です。 宜しくお願い申し上げます。

  • Windows Updateができません

    今別の問題で頭を抱えていて、Windows Updateを試みました。 なのですが、 http://update.microsoft.com/ http://update.microsoft.com/microsoftupdate/ http://support.microsoft.com/kb/818018/ja など、どれも「Internet Explorerではこのページは表示できません」と出ます。 ツール→Windows Updateでやっても同じでした。 Program Filesを見ても、それに関したフォルダがありません。 前まではきちんと接続出来てたのですが・・・・ OSはWindows XP Home Editionです。

  • Snipping Toolの保存名自動変更について

    こんにちわ。 vistaについているスクリーンキャプチャツールの「SnippingTool 」を使っているのですが、 「名前を付けて保存」を選択すると、保存先指定と保存名変更などの画面が出てきますが、 標準で保存名のファイル名が「キャプチャ.JPG」になっているのですが、 毎回変更するのが面倒なので、自動で変更できないでしょうか? 0001,002,003・・・など勝手に名前変更して保存したいです。 保存名はなんでも構いません。 標準の「キャプチャ.JPG」のまま保存しようとしても、 「キャプチャ(002).JPG」などにはならず、上書きされてしまいます。

  • ウィンドウの大きさ,ファイルの保存

    些細な疑問ですが,何かのプログラムを立ち上げた時のウィンドウの大きさはどのようにして決まるのでしょうか?なんとなく,前回立ち下げの際の,ウィンドウサイズになっているような気がしますが,そうでないときもありそうです.逆に「○○を立ち上げる際は■■の大きさで」と設定できるものでしょうか? また,ファイルを保存する際に,現れるフォルダは,どのようにして決まっているのでしょうか?同じ場所にたくさんのファイルを「名前をつけて保存」する場合,毎回目的のフォルダーまで移動しなければならず,面倒です.何か設定するようなことはできるのでしょうか. ご存知の方,ご教示頂ければと思います.宜しくお願い致します.