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

  • 概要

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

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

  • ダウンロード

    DOWNLOAD ⇒ HmPasteFileList.zip v1.30ファイル。
    └更新日 2017/04/08

    秀丸マクロ

    この程度のことであれば、強力な.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行増えるだけです。

  • ライセンス

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