2012年3月18日日曜日

[windows]右クリックメニューに「パスのコピー」追加

色んなソフトでファイルを開く際、
Windowsのエクスプローラーで開いているパスを
コピー&ペーストして目的のディレクトリまで行く
と言うことが多々あります。

プログラムを書いている際も、
テスト的にフルパスをコードに直接書く事もよくあり、
この場合、Windowsの「\」文字区切りだとまずい場合がほとんどで、
「\\」と二重にするか、Unixでの「/」に書き換えたりする必要があり、
とにかくめんどくさい。

と言うことで、
Windowsのエクスプローラーでファイルを選択して右クリックして、
以下のようなパスをコピーするメニューを追加しました。
















やることは2つ
1.メニューを追加
2.メニューが選択された際に実行されるプログラムを用意


1.メニューを追加

Windowsの右クリックメニューはレジストリで管理されているので
レジストリに追加する必要があります。
レジストリエディタで追加する場合は、
スタートメニューを起動し、「regedit」と打ち込んでレジストリエディタを起動。

「HKEY_CLASSES_ROOT\*\shell」まで行き

1.「shell」を選択して「右クリック->新規->キー」で、キーを追加(名前は何でもいい)














2.追加したキーの中にある「(規定)」と言うのをダブルクリックし、
出てきたダイアログの「値のデータ」に「UNCパスコピー」と入れてOK
これが右クリックした際に出てくるメニュー名になります。











3.1で追加したキーを右クリックし、1と同じ事をして新たにキーを追加。
ここで追加したキーの名前は「command」にしてください。

追加したキーの中にある「(規定)」と言うのをダブルクリックし、
出てきたダイアログの「値のデータ」に実行するコマンドを書きます。











今回、Pythonで書いたプログラムが実行されるようにしており、
「python "J:/python/winPathCopy.py" %1 UNC -dir」
と言うコマンドを入力。

「winPathCopy.py」は、パスをクリップボードにコピーするPythonScriptです。
「%1」には、エクスプローラーで選択しているファイルかディレクトリのフルパスがきます。

その後ろの、「UNC」や「-dir」は「winPathCopy.py」で用意したてきとうなフラグです。



■winPathCopy.pyの中身
# -*- coding: shift-jis -*-
import sys
import os.path
#***********************************************************
## clipboadへコピー
#***********************************************************
def copyToClipboad( msStr ):
    import subprocess
    try:
        p = subprocess.Popen(['clip'], stdin=subprocess.PIPE)
        p.stdin.write(msStr )
        p.stdin.close()
        retcode = p.wait()
        return True
    except OSError:
        return False
    except ValueError:
        return False
    return True

if __name__=='__main__':
    if len(sys.argv)==3:
        sys.exit()

    file_path = sys.argv[1]
    mode = sys.argv[2]

    if mode=='UNIX':
        file_path = file_path.replace('\\','/')
        path = file_path

    if len(sys.argv)==4:
        if sys.argv[3]=='-dir':
            path = os.path.dirname(file_path)

copyToClipboad(path)



■レジストリへの登録がめんどくさい

いちいち手でレジストリに登録するのも面倒なので
reg ファイルを用意しておくと、色んなマシンで実行して使えますと。

Windows Registry Editor Version 5.00
;==============================================;
;UNCパスコピー作成
;==============================================
[HKEY_CLASSES_ROOT\*\shell\unc_path]

[HKEY_CLASSES_ROOT\*\shell\unc_path]
@="UNCパスコピー"

[HKEY_CLASSES_ROOT\*\shell\unc_path\command]

[HKEY_CLASSES_ROOT\*\shell\unc_path\command]
@="python \"J:/python/winPathCopy.py\" %1 UNC -dir"
;==============================================
; UNCファイルパスコピー作成
;==============================================

[HKEY_CLASSES_ROOT\*\shell\unc_file_path]

[HKEY_CLASSES_ROOT\*\shell\unc_file_path]
@="UNCファイルパスコピー"

[HKEY_CLASSES_ROOT\*\shell\unc_file_path\command]

[HKEY_CLASSES_ROOT\*\shell\unc_file_path\command]
@="python \"J:/python/winPathCopy.py\" %1 UNC"
;==============================================
; UNIXパスコピー作成
;==============================================

[HKEY_CLASSES_ROOT\*\shell\unix_path]

[HKEY_CLASSES_ROOT\*\shell\unix_path]
@="UNIXパスコピー"

[HKEY_CLASSES_ROOT\*\shell\unix_path\command]

[HKEY_CLASSES_ROOT\*\shell\unix_path\command]
@="python \"J:/python/winPathCopy.py\" %1 UNIX -dir"
;==============================================
; UNIXファイルパスコピー作成
;==============================================

[HKEY_CLASSES_ROOT\*\shell\unix_file_path]

[HKEY_CLASSES_ROOT\*\shell\unix_file_path]
@="UNIXファイルパスコピー"

[HKEY_CLASSES_ROOT\*\shell\unix_file_path\command]

[HKEY_CLASSES_ROOT\*\shell\unix_file_path\command]
@="python \"J:/python/winPathCopy.py\" %1 UNIX"

0 件のコメント:

コメントを投稿