右クリックでパスをコピーするVBScript
よく右クリックのメニューにパスをコピーする機能を追加してくれるソフトがありますよね。
無くてはならない機能で、よく使ってました。Window 7は標準で実装されてるらしいんですが。。僕はまだXPです。
まぁそれで、右クリックでパスをコピーするのをVBScriptでやってしまおうということです。
VBS本体とレジストリを使用します。
VBS本体
'CopyPathToClipBoard.vbs Option Explicit Dim objArgs Set objArgs = WScript.Arguments If objArgs.Count = 0 Then WScript.Quit ClipBoard_SetData objArgs(0) Sub ClipBoard_SetData(MyString) Const GHND = &H42 Const CF_TEXT = 1 Const MAXSIZE = 4096 Dim hGlobalMemory, lpGlobalMemory Dim hClipMemory, X Dim GlobalUnlock, GlobalLock, GlobalAlloc Dim CloseClipboard, OpenClipboard Dim EmptyClipboard, lstrcpy, SetClipboardData Set GlobalUnlock = CreateObject("SfcMini.DynaCall") GlobalUnlock.Declare "kernel32","GlobalUnlock" Set GlobalLock = CreateObject("SfcMini.DynaCall") GlobalLock.Declare "kernel32","GlobalLock" Set GlobalAlloc = CreateObject("SfcMini.DynaCall") GlobalAlloc.Declare "kernel32","GlobalAlloc" Set CloseClipboard = CreateObject("SfcMini.DynaCall") CloseClipboard.Declare "User32","CloseClipboard" Set OpenClipboard = CreateObject("SfcMini.DynaCall") OpenClipboard.Declare "User32","OpenClipboard" Set EmptyClipboard = CreateObject("SfcMini.DynaCall") EmptyClipboard.Declare "User32","EmptyClipboard" Set lstrcpy = CreateObject("SfcMini.DynaCall") lstrcpy.Declare "kernel32","lstrcpy" Set SetClipboardData = CreateObject("SfcMini.DynaCall") SetClipboardData.Declare "User32","SetClipboardData" hGlobalMemory = GlobalAlloc(GHND, LenB(MyString) + 1) lpGlobalMemory = GlobalLock(hGlobalMemory) lpGlobalMemory = lstrcpy(lpGlobalMemory, MyString) If GlobalUnlock(hGlobalMemory) <> 0 Then MsgBox "メモリのロックを解除できません。処理が失敗しました。" If CloseClipboard() = 0 Then MsgBox "クリップボードを閉じることができません。" End If Exit Sub End If If OpenClipboard(0) = 0 Then MsgBox "クリップボードを開くことができません。処理が失敗しました。" Exit Sub End If X = EmptyClipboard() hClipMemory = SetClipboardData(CF_TEXT, hGlobalMemory) If CloseClipboard() = 0 Then MsgBox "クリップボードを閉じることができません。" End If End Sub
クリップボードへ文字列をコピーする部分のプログラムは、殆ど某MSのサンプルです(笑)
多少変えたりVBS用に使えるようにしました。VBSじゃGoToとか使えないし。
あと、クリップボードへ文字列をコピーするロジックは他にもIEオブジェクトを利用する方法などありますが、
今回はWindows APIを使ってコピーしてます。IEだと重いし。。
標準VBSではWindows APIは使えませんので、いつもの「SFC mini」を使ってます。
レジストリ
Windows Registry Editor Version 5.00 ;CopyPathToClipBoard.reg [HKEY_CLASSES_ROOT\Directory\shell\PathCoppin] @="ぱすこっぴん(&Z)" [HKEY_CLASSES_ROOT\Directory\shell\PathCoppin\command] @="wscript.exe \"C:\\CopyPathToClipBoard.vbs\" \"%1\"" [HKEY_CLASSES_ROOT\*\shell\PathCoppin] @="ぱすこっぴん(&Z)" [HKEY_CLASSES_ROOT\*\shell\PathCoppin\command] @="wscript.exe \"C:\\CopyPathToClipBoard.vbs\" \"%1\""
VBSファイルにコマンドライン引数を渡すためにレジストリにキーを作成、エントリに値を入れます。
パスはVBSファイルが置いてある場所を指定します。
また、階層の区切りの「\」などの特殊文字はエスケープする必要があります。
レジストリへ登録されると、ファイルかフォルダを右クリックした時、こんなメニューになると思います。
窓使いの憂鬱
ここが肝というか…(笑)わざわざVBSファイルを使ってパスをコピーする意味があるというか…。。
ソフトの場合、メニューのショートカットが変更出来ないので、
窓使いの憂鬱を使って一連のキー操作を作る場合、うまくいかない場合があるんですよね。
他の項目とショートカットが被ったりなどで。
なので、前項のレジストリ登録で(&Z)としているのは、あまり被らなそうだから(&Z)にしてるんです。
もし色んなソフトをインストールしていってメニュー項目が増えて被ってしまっても、
レジストリをちょこっと変更すればよいだけですし。
#Explorer用 window Explorer /explorer\.exe/ : Global key W-*c = Apps z
とかやればWin+Cでパスがコピー出来ます。
- 作者: 五十嵐貴之
- 出版社/メーカー: ソシム
- 発売日: 2009/06/01
- メディア: 単行本
- 購入: 1人 クリック: 65回
- この商品を含むブログ (27件) を見る