なんか、僕は作業しているといつの間にかエクスプローラーのウィンドウがいっぱいになってたりすることがあるんです(笑)
個人的には、4〜5以上エクスプローラーのウィンドウがあるとウザいと思ってしまいます。。
そういった時は一旦全部閉じてしまおう、ということで、
一辺にエクスプローラーのウィンドウを閉じるVBScriptです。
このスクリプトに関しても、
ファイル名を指定して実行(Win+R)を利用してショートカットを用いた方が便利です。
'CloseExplorer.vbs Option Explicit On Error Resume Next Dim objShell, objWindow Dim Cnt Set objShell = CreateObject("Shell.Application") Do For Each objWindow In objShell.Windows 'エクスプローラーのみ閉じる If TypeName(objWindow.document) = "IShellFolderViewDual2" Then objWindow.Quit Cnt = Cnt + 1 End If Next If Cnt = 0 Then Exit Do Cnt = 0 Loop Set objShell = Nothing
エクスプローラーが無くなるまでループ
一昨日のファイル吸い出しVBScriptでも同じ手法を使ってますが、
For Eachの外にDo Loopを噛ますことで、エクスプローラーが無くなるまでループという処理をしてます。
単純にFor Eachのループ中その要素を移動したり削除したりすると、
要素数分ループするFor Eachでは、途中で要素数が変わって思い通りの結果になりません。
ですので、例えばFor Eachでその要素のパスとか、今回ならウィンドウハンドルを配列に控えておいて、
後でその配列分ループして移動なり削除する手法を用いますが、
これだと今回のプログラムの場合、何故だかエラーが多いんです(笑)
プログラムの記述ミスとかでは無く、VBScript自体が返すエラーです。
どうにかならないかなぁ〜と思って、この手法を思いつき試したら、エラーはかなり少なくなりました。
でも、完全には無くならないようですので、On Error Resume Nextステートメントで誤魔化してます(笑)
まぁ、この方が見た目もすっきりしますし、良いかも。
追記
この記事を書いていた頃はWindows XPを使っていました。追記している2018年現在、Windows 10が主流ですが、上記のままではエクスプローラーを閉じることが出来ません。
「IShellFolderViewDual2」の部分を「IShellFolderViewDual3」にすることで閉じることが出来ます。今後もし数字の部分が増えていくのなら、「InStr(TypeName(objWindow.document), "IShellFolderViewDual")」とでもした方が良いかもしれません。

- 作者: 五十嵐貴之
- 出版社/メーカー: ソシム
- 発売日: 2009/06/01
- メディア: 単行本
- 購入: 1人 クリック: 65回
- この商品を含むブログ (27件) を見る