別アプリケーションのウインドウの表示座標を取得するには?

解決


どら  2010-03-05 12:37:20  No: 71460  IP: [192.*.*.*]

こんにちは。

現在開いているアプリケーションのウインドウの場所・サイズを取得したいと
思っています。
解像度を一時的に変更したとき等に開いているウインドウの表示位置を記憶
して、解像度を元に戻したときに復元するアプリケーションがありますが、
あれと似たような処理をさせたいのです。

ウインドウの表示位置を設定するのはSetWindowPosでよさそうなのですが・・・

取得するときは、どの様にすればよいのでしょうか?
EnumWindowsを実行して、CALLBACK関数の中でGetWindowText→GetWindowRect
で良いものだと思っていたのですが・・・

ご存じの方いらっしゃいましたら、ご教授いただけませんでしょうか?

編集 削除
仲澤@失業者  2010-03-05 14:35:32  No: 71461  IP: [192.*.*.*]

GetWindowRect()でデスクトップ座標(スクリーン座標)上の
ウインドウ矩形がとれます。

編集 削除
仲澤@失業者  2010-03-05 14:40:16  No: 71462  IP: [192.*.*.*]

失礼。全アプリですかっ。
GetWindowPlacement()をEnumWindows()で
まわすしかないかも。

編集 削除
どら  2010-03-05 15:24:27  No: 71463  IP: [192.*.*.*]

中澤様

ありがとうございます!!
それらしき値と、戻す際の関数もこれでメドがつきました!

ついでに質問なのですが、戻す際に識別するためのものはプロセスIDでいいん
でしょうか?

ご存じでしたら、ご教授いただけると幸いです。

編集 削除
仲澤@失業者  2010-03-05 16:19:54  No: 71464  IP: [192.*.*.*]

トップレベルのウインドウだけをGetWindowPlacement()で取得して、
この後の処理がどうなっているのかわからないので何ともいえませんが、
取得した全てのウインドウが閉じられていないという条件なら、
一緒に保管しておいたHWNDを指定してSetWindowPlacement()で
十分な気がします。

編集 削除
どら  2010-03-05 23:56:51  No: 71465  IP: [192.*.*.*]

中澤様

ありがとうございます。
トップレベルのウインドウの取得というところから、GetTopWindow、GetNextWindow、
IsWindowVisibleをつかって、可視状態にあるウインドウのハンドルだけを取
得し、保存することで対応できました!!

本当にありがとうございました!

編集 削除