最終更新日 2024-09-25

「hmPy・IronPython」のその他の例題 クリップボード内のファイルリストのペースト

概要

秀丸マクロとhmPyの例題のひとつとなります。

エキスプローラーなどで、「1つ」または「複数」のファイルをコピーした後
秀丸に張り付けると、「ファイル名のフルパス名(一覧)がペーストされる」といったものを作ってみましょう。

ダウンロード

更新日 2017/12/15
HmPasteFileList.zip v1.30

秀丸マクロ

この程度のことであれば、強力な.NETであれば、数行で情報を獲得できます。

秀丸マクロではその情報を引き出すだけでOKでしょう。

// 0 とはクリップボードがテキスト(純粋テキストでなくともテキストとして扱えるものも含む)
if (getclipboardinfo( 0 )) {
  paste;
  endmacro;
}


// 以下クリップボードはテキストではない時の処理となる

#PY = loaddll( hidemarudir + "\\" + "hmPy.dll" );

if (!#PY) {
  message( "hmPyが導入されていないようです。" );
  endmacro;
}

disabledraw;

// クリップボードにファイル(のリスト)をコピーしてるものと想定し、countにファイル数を入れる。
// ファイルリストのコピーでなければ、カウントは0
#_ = dllfuncw( #PY, "DoString", R"IPY(

import clr
clr.AddReference('System.Windows.Forms')
from System.Windows.Forms import Clipboard
files = Clipboard.GetFileDropList()
count = files.Count
if count == 0:
  # 秀丸の本来のペースト機能にゆだねる。
  # (どうせテキストではないので秀丸は何もしなだろう…。)
  hm.Macro.Eval(r"""
    paste;
  """);

# ファイル(のリスト)がクリップボードに入っているならば
else:
  hm.Macro.Eval("begingroupundo;");

  # 順次リストからファイル名を取得して、秀丸へと挿入
  for f in files:
    hm.Macro.Var["$filename"] = f
    hm.Macro.Eval(r"""
      insert $filename + "\n";
    """);

  hm.Macro.Eval("endgroupundo;")

)IPY"
);

enabledraw;

freedll( #PY );
    

他の応用

例えば、特定の拡張子なら、
ファイルをコピーして秀丸上でペーストすると、その中身の文字列をペーストする、
などというのもいとも簡単に実装できるでしょう。
上記のプログラムが4、5行増えるだけです。

ライセンス

パブリックドメインです。自由にお使いください。