■81068 / inTopicNo.2) |
Re[1]: 開いている全ウインドウのパスを取得する方法 |
□投稿者/ 魔界の仮面弁士 (846回)-(2016/08/28(Sun) 14:04:14)
|
■No81061 (ぽぽろーぐ さん) に返信 > 実行前に開いていたウインドウを復元する、というコードをどのように書けば良いか教えてください、 起動中の Explorer は ShellWindows コレクションから取得できます。 https://msdn.microsoft.com/en-us/library/windows/desktop/bb773974.aspx
'Visual Basic Dim ShellWindows As Object = GetObject("new:9BA05972-F6A8-11CF-A442-00A0C90A8F39")
// C# dynamic shellWindows = Activator.CreateInstance(Type.GetTypeFromCLSID(Guid.Parse("{9BA05972-F6A8-11CF-A442-00A0C90A8F39}")));
上記コレクションを列挙することで、Explorer と Internet Explorer を列挙できます。 各インスタンスが Explorer なのか IE なのかは、FullName プロパティで確認できます。 https://msdn.microsoft.com/en-us/library/aa752053.aspx
(IE5.5 や IE6 あたりだと、IEでフォルダを開いたり、Explorer で Web ページを 開いたりできましたが、今はそういうこともないので、FullName だけで判断できるはず)
あとは、Left, Top, Width, Height プロパティから座標を拾い、 LocationURL から表示しているパスを拾っていけば、 「現在のウィンドウ」が分かりますので、これを強制終了前に保存しておくと良いでしょう。 https://msdn.microsoft.com/en-us/library/aa752084.aspx
なお、復元に関しては、「ウィンドウの位置」と「表示されるフォルダ」が問題になります。
たとえば、画面構成の変化(画面の縦横変更、マルチモニター環境の変更、 グラフィックボード付きドッキングステーションの挿抜など)によっては 「以前の座標」に復元させると画面外の座標を指してしまうことがあります。
また、リムーバブルドライブやネットワークドライブなどを開いていた場合、 再開時にはそのパスが使用できなっている可能性もありますので、そうした場合に どのように振る舞うのかも考えておく必要があるでしょう。
蛇足ですが、表示設定(並べて表示、アイコン、詳細など)についても復元するなら、 Shell32.ShellFolderView オブジェクトの CurrentViewMode プロパティもしくは IFolderView インターフェイスの SetCurrentViewMode メソッドを利用できます。 https://msdn.microsoft.com/en-us/library/windows/desktop/bb775618.aspx
|
|