最も簡単なのは、「送る」に設定されたアプリケーションにエクスプローラ で選択されたファイルのリストがフルパスで引数として渡されるのを利用する事です。 (コマンドプロンプト文字列の制限) これを利用すれば、WSH(VBScript)を「送る」に置くだけで、 ファイルのリストやフルパスのリストを取得する事ができますブラウザでダウンロード
' クリップボードとSHIFTキー用 ' ※ HTA 等では直接 window.clipboardData より実行 ' ※ するように書き換える必要があります Set objIE = CreateObject("InternetExplorer.Application") objIE.Navigate("about:blank") Do While objIE.Busy ' 100 ミリ秒 Wscript.Sleep 100 Loop ' SHIFT キーを感知する為の処理 Dim isShift objIE.document.getElementsByTagName("BODY")(0).innerHTML = _ "<INPUT id=ret><INPUT id=bt type=button " & _ " onClick='document.getElementById(""ret"").value=window.event.shiftKey'>" objIE.document.getElementById("bt").click if Ucase(objIE.document.getElementById("ret").value) = "TRUE" then isShift = True else isShift = False end if ' データ作成 str = "" For I = 0 to Wscript.Arguments.Count-1 if isShift then ' SHIFT キーが押されていたらフルパス str = str & Wscript.Arguments(I) & vbCrLf else ' SHIFT キーが押されていなければファイル名のみ aData = Split( Wscript.Arguments(I), "\" ) str = str & aData(Ubound(aData)) & vbCrLf end if Next ' クリップボードへコピー Call objIE.document.parentWindow.clipboardData.SetData( "Text", str ) objIE.Quit
クリップボードのコピー部分をコマンドラインのアプリケーション を使って実行する方法は以下を参照して下さい。 IE をいまいち信用できない人用です。 ■ VBS : ファイルリストをクリップボードへコピー ■ VBS : ファイルのフルパスをクリップボードへ
最近は、IEがクリップボードへの貼り付けに許可を求めるので、 信頼するサイトへ "about:blank" を登録して、 ( https のチェックボックスのチェックは外します ) スクリプトのセクションで、クリツプボードへの貼り付けを「有効」にします
しかし、このままでは大量のファイルの場合、コマンドラインの長さ 制限でエラーになってしまうので、いったんエクスプローラから「コピー」 を実行し、それをあらためてテキスト形式でクリップボードへ転送しな おす VB.NET アプリケーションを以下に示します ( これは、コマンドラインからビルドした Windows アプリケーションです )ブラウザでダウンロード
Imports System.Collections.Specialized Module MyModule ' ******************************************************** ' * 実行 ' ******************************************************** Sub Main() ' 引数による処理タイプの決定 ' name : ファイル名のみ ' path : フルパス Dim argv As String() argv = System.Environment.GetCommandLineArgs() Dim ActType As String If argv.Length = 1 Then ActType = "name" Else ' name または path ActType = argv(1) End If ' SHIFT キーを感知できた場合は処理を反転する If My.Computer.Keyboard.ShiftKeyDown Then If ActType = "name" Then ActType = "path" else ActType = "name" End If End If Dim FileList As StringCollection Dim FilePath As String Dim ClipString As String = "" Dim delimStr As String = "\" Dim delimiter As Char() = delimStr.ToCharArray() Dim aData As String() ' クリップボードにファイルのデータがあった場合 If My.Computer.Clipboard.ContainsFileDropList() Then 'データを取得する FileList = My.Computer.Clipboard.GetFileDropList() '取得したファイル名を列挙する For Each FilePath In FileList If ActType = "path" Then ClipString += FilePath + ControlChars.CrLf Else aData = FilePath.Split(delimiter) ClipString += aData(aData.Length - 1) + ControlChars.CrLf End If Next My.Computer.Clipboard.SetText(ClipString) End If End Sub End Module
使い勝手としては、デスクトップにショートカットを作成し、 ショートカットキーを設定すればエクスプローラからすぐ使えます。 ( その場合は、内部の SHIFT キー反転は使えません ) 「送る」に入れると無条件に選択ファイルの処理をしようとするので エラーになってしまいます。Shell 拡張を使えば良いのですが、 だんだんメンテナンスが一般的ではなくなってしまうので今回は割愛します。 さらに、Visual Studio でビルドしたい場合は、ApplicationEvents.vb を使用して、擬似的にフォームを使わないようにするのが簡単です
Imports System.Collections.Specialized Namespace My Partial Friend Class MyApplication ' ******************************************************** ' スタートアップ ' ******************************************************** Private Sub MyApplication_Startup(ByVal sender As Object, _ ByVal e As Microsoft.VisualBasic.ApplicationServices.StartupEventArgs) _ Handles Me.Startup ' 引数による処理タイプの決定 ' name : ファイル名のみ ' path : フルパス Dim argv As String() argv = System.Environment.GetCommandLineArgs() Dim ActType As String If argv.Length = 1 Then ActType = "name" Else ' name または path ActType = argv(1) End If ' SHIFT キーを感知できた場合は処理を反転する If My.Computer.Keyboard.ShiftKeyDown Then If ActType = "name" Then ActType = "path" End If If ActType = "path" Then ActType = "name" End If End If Dim FileList As StringCollection Dim FilePath As String Dim ClipString As String = "" Dim delimStr As String = "\" Dim delimiter As Char() = delimStr.ToCharArray() Dim aData As String() ' フォームを使用せずに終了する e.Cancel = True ' クリップボードにファイルのデータがあった場合 If Clipboard.ContainsFileDropList() Then 'データを取得する FileList = Clipboard.GetFileDropList() '取得したファイル名を列挙する For Each FilePath In FileList If ActType = "path" Then ClipString += FilePath + ControlChars.CrLf Else aData = FilePath.Split(delimiter) ClipString += aData(aData.Length - 1) + ControlChars.CrLf End If Next Clipboard.SetText(ClipString) End If End Sub End Class End Namespace
|
【古い記事(保存用)の最新記事】
- Auto-Translate(Chrome 拡張) に価格比較オプション(Superfish)が追加されているので、『使わない』ように設定します
- 現在は、右クリックから実行できます / FileZilla で直接 APPE コマンドを実行して空のファイルを新規で作成する
- プロジェクタ用拡大鏡 : カクダイン
- IE8(IE9)用アドオン : SnapCrabでスクロールが必要なWEBページと一般のウインドウのキャプチャと色コードをクリップボードにを転送
- 「ファイル名を指定して実行」のダイアログを起動してデスクトップ中央に表示させる
- Firefox 拡張の Screengrab は、Firefox 拡張の Firebug で最高の効果
- +Lhaca 1.24 デラックス版
- Oracle : 別スキーマテーブル置き換えインポート : コマンドライン入力支援
- Oracle : 別スキーマテーブルデータインポート : コマンドライン入力支援
- Oracle : 同一スキーマテーブルインポート : コマンドライン入力支援
- Oracle : スキーマエクスポート( expdp.hta ) : コマンドライン入力支援
- PHPマニュアルのリコンパイル