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

解決


どら  2010-03-05 21:37:20  No: 71460

こんにちは。

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

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

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

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


仲澤@失業者  2010-03-05 23:35:32  No: 71461

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


仲澤@失業者  2010-03-05 23:40:16  No: 71462

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


どら  2010-03-06 00:24:27  No: 71463

中澤様

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

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

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


仲澤@失業者  2010-03-06 01:19:54  No: 71464

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


どら  2010-03-06 08:56:51  No: 71465

中澤様

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加