ウインドウを前面にする
雲多めの晴れ。
エクスプローラーを気軽に、希望するフォルダを開いた状態で一気に起動出来ないか?
また、既にそれが開いているなら、そのウインドウを前面にすることは出来ないか?と考えた。
Launchy: The Open Source Keystroke Launcherというランチャーを使わせてもらっているので、それ上でバッチファイルに引数を渡して起動させればいいと考えた。
ただ、調べてみると、バッチファイルだけでは、ウインドウの前面化は出来ないらしい。
VB Scriptでウインドウの前面化が実現できるそうだ。
そこで、バッチファイルで何を起動・前面化するかを受け取り、バッチファイルからそれを引数でVB Scriptで渡して前面化し、VB Scriptからの戻り値を見て、次の処理をする、という風にすることにした。
ファイル名は何でもいいけれど、exp.batとexp.vbsとする。
exp.bat
@echo off
setlocal enabledelayedexpansion
set arg=%1
cscript "フルパス\exp.vbs" !arg!
if %ERRORLEVEL% equ 0 (
goto :eof
)
set explorerexe=start "" explorer.exe
set para=fullpath
if !arg! == downloads (
set para="フルパス\Downloads"
) else if !arg! == Documents (
set para="フルパス\Documents"
) else (
set para="デフォルトのフォルダ名"
)
!explorerexe! !para!
endlocal
exp.vbs
Option Explicit
Dim objWshShell
Set objWshShell = WScript.CreateObject("WScript.Shell")
Dim return
If objWshShell.AppActivate(Wscript.Arguments(0)) Then
return=0
else
return=1
End if
Set objWshShell = Nothing
Wscript.Quit(return)
ウインドウの前面化をするために、ウインドウ・タイトルを使うこととする。
exp.batで、ウインドウ・タイトルの引数を受け取り、その引数をexp.vbsに渡す。
exp.vbsで、そのウインドウ・タイトルがあれば前面化し、なければ何もしない。
戻り値をそれぞれ設定し、それをexp.batに返す。
それを受け取ったexp.batは、前面化に成功したら処理は終了、前面化出来なかったら、その引数に設定したフォルダを起動する処理を実行する。
上記の例で言えば、「downloads」という引数を受け取ったら、「downloads」というウインドウ・タイトルがあれば、それを前面化、なければ、if分の中に書かれているフルパスのフォルダ名を「explorer.exe」に渡して、そのフォルダを起動する、という仕組み。
よく開くフォルダがあるなら、こういうのをif文でいくつも作っておけば、エクスプローラーを開いて、何度もクリックせずに、そのフォルダを一瞬で開くことが出来る。
ちなみに、exp.vbsの前面化は、ウインドウ・タイトルだけではなく、プロセスIDでも前面化出来る。
プロセスIDの方が間違いは少ないけれど、プロセスIDを探る処理を追加しないといけなくなるので、ちょっと面倒。
今回は、エクスプローラーを開くことが目的なので、これで十分。
エクスプローラーのウインドウ・タイトルは、現在開いているフォルダ名だけなので、とても簡単である。
ウインドウ・タイトルをピッタリ同じに出来るなら、他のソフトウェアを前面化、起動させることも可能。
他のソフトウェアだと、開いているファイル名とそのソフトウェア名という感じで、かなり長いものになるので、それを引数として渡すのは面倒。
その時は、バッチファイルの方で、一部の文字列があればそれでよし、という仕組みにするのが無難かな。
と、Launchyを使っているので、こういうことが出来るようになった。
(引数を受け取れるなら、他のランチャーでも可能。)
これで、エクスプローラーを開くのがとても楽になった。
| 固定リンク
「パソコン・インターネット」カテゴリの記事
- 3本指(2022.06.26)
- ようこそ、ニフティーサーブへ(2022.06.22)
- 大変だ(2022.06.19)
- 何だった(2022.06.16)
- 無事完了(2022.06.07)
コメント