JavaScript-ファイルのパスの取得はHTAにドロップされました
-
09-09-2019 - |
質問
私は個人的な使用のために少しHTAを構築しており、ファイルをインターフェイスにドラッグアンドドロップできるようにしたいと考えています。ファイルがドロップされたら、自動的に実行します(ファイル拡張子のように設定したパラメーターに適合していると仮定します)、または少なくともHTAインターフェイスの入力ボックスに入力します。
私は広範囲に検索しましたが、解決策が見つかりません。考え?
解決
HTAは明らかにシェルドロップ操作をターゲットにすることはできません。少なくとも私のシステムでは、HTAに何かをドロップすることは不可能です。
これはあなたができないことを意味します 直接 あなたが意図していることをしてください。
ただし、.VBSはドロップターゲットになる場合があります。ドロップされたファイルのフルパスは、 WScript.Arguments.Unnamed
コレクション。
HTAは、コマンドラインの引数にアクセスできます コマンドラインプロパティ. 。これは、ドロップされたファイルをコマンドラインに変換し、HTAを呼び出す小さなヘルパーVBScriptを構築できることを意味します。
.VBSに無限の量のファイルをドロップすることはできず、コマンドラインも無制限ではないことに注意してください。数kbの面積に長さの制限があります(制限がどこにあるかを見つけようとしていません。限界に直面する準備をしてください)。
他のヒント
Tomalakは彼の声明で間違っています... HTAファイルのレジストリにDrophandlerを追加する必要があることを除いて、あなたが望むことをする方法があります。やる。私はそれについて多くのドキュメントを見つけることができませんでしたが、ここには、ミシェル・ギャラントという男によってずっと前に書かれたHTAへのリンクがあります。 http://www.jensign.com/javascience/www/wsh/imager/index.html
HTAが起動すると、Drophandlerが既に構成されているかどうかを確認します。そうでない場合は、それがあなたのためにそれを構成するためのオプションを提供します。あなたがしなければならないすべてを構成したら、HTAとWallahを閉じて再開することだけで、HTAファイルでドラッグアンドドロップのサポートになります。
ドロップハンドラーを有効にしたくない場合は、これが可能になる可能性があることを想像できます。それはちょっとしたコメディチェーンですが、私がコーナーに戻されてその機能が必要な場合、私はこれを実装しているのを見ることができました。
SRCをどこかに温度フォルダーとして持つiframeを作成できます。このフォルダーは、エクスプローラービューとして表示されます。その後、ファイルをドラッグできます。そのフォルダーに対してポーリングルーチンを設定して、新しいファイルがあるかどうかを確認します。そして、出来上がり、特定のファイルを使用してドラッグアンドドロップ操作をサポートするという不自由な方法があります。
ドラッグアンドドロップを提供するGoogle Gearsを試してみてください。
HTAでMySQLを使用することもできます。
Google GearsはHTAでは利用できませんが、HTMLファイルでActiveXObjectを作成してから、 iframe(<iframe application="true" src=".."></iframe>)
その後、を使用できます activexobject
を通って iframe
.
それにかんする …
“ファイルを[HTA]インターフェイスにドラッグアンドドロップできるようにしたい”
…私は、HTAファイル自体やショートカットにファイルをドロップするのではなく、HTA実行ウィンドウにファイルをドロップしたいという願望として解釈します。
HTML5を使用すると、ドロップ自体が簡単です。例えばaを使用します <div>
ドロップエリアとしての要素。この要素については、イベントを処理します dragenter
, dragover
と drop
. 。たとえば、ドロップハンドラーは次のようになります:
function on_drop( e )
{
e.preventDefault(); // stops the browser from redirecting off to the file
var dt = e.dataTransfer
var is_file_transfer = false;
for( var i = 0; i < dt.types.length; ++i )
{
if( dt.types[i].toLowerCase() == 'files' )
{
is_file_transfer = true;
}
}
if( !is_file_transfer )
{
return false;
}
on_files_dropped( dt.files );
return true;
}
… どこ on_files_dropped
ファイルのドロップを処理する関数です。
ドキュメントロードされたイベントでイベントハンドラーを動的に追加すると、次のようになります。
var dropbox = document.getElementById( 'blah' );
dropbox.addEventListener( 'dragenter', on_dragenter, false );
dropbox.addEventListener( 'dragover', on_dragover, false );
dropbox.addEventListener( 'drop', on_drop, false );
ここまでは順調ですね。
ただし、セキュリティには制限があります。 元のファイルパスについて直接知識が得られません, 、ファイル名とファイルサイズのみ。この機能は、ローカル信頼できるHTMLアプリケーションではなく、Web用に設計されています。そのため、必ずしも問題である場合とそうでない場合があります。
ドロップされたファイルをとして使用する目的で ソース HTML要素の場合、そして一般的にドロップされたファイルを読み取るために、HTML5は
FileReader
(たくさんあります チュートリアル 技術文書にさらにリンクしています)。windows mediaplayerでファイルを再生するために、ローカルパスが必要な場合、あなたは 推定 ドラッグ操作がWindows Explorerで発信されたことは、ファイルエクスプローラーとも呼ばれ、その名前とサイズのファイルが含まれている場合、どのExplorerウィンドウが含まれているかを確認するだけです。
うまくいけば、そのような発生ウィンドウが複数ないことを願っています。
var shell = new ActiveXObject( "Shell.Application" );
var fso = new ActiveXObject( "Scripting.FileSystemObject" );
function possible_paths_for( filename )
{
var windows = shell.windows(); // Windows Explorer windows.
var n_windows = windows.Count;
var lowercase_filename = filename.toLowerCase();
var paths = Array();
for( var i = 0; i < n_windows; ++i )
{
var url = windows.Item(i).LocationURL;
var path = decodeURI( url.substr( 8 ) ).replace( /\//g, '\\' );
// The path can be the path of this HTML application (.hta file), so:
if( fso.FolderExists( path ) )
{
var folder = fso.GetFolder( path );
for( var it = new Enumerator( folder.Files ); !it.atEnd(); it.moveNext() )
{
var file = it.item();
if( file.Name.toLowerCase() == lowercase_filename )
{
paths.push( file.Path.toLowerCase() );
}
}
}
}
return paths;
}
本質的にそれだけです。 HTASがIE7にデフォルトであるため、HTML5機能をどのように取得するかを除いて、たぶん、たぶん。 Doctype宣言を通してされるかもしれませんが、これまでのところ私の小さな実験では、次のことを使用しています。
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<!-- A windows web control defaults to quirky IE7 semantics. Request for better: -->
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta http-equiv="MSThemeCompatible" content="yes">
これにより、最新のインターネットエクスプローラーエンジンが提供されますが、 HTA
要素、したがってコマンドラインへの直接アクセスはありません。見つけた コマンドラインは、Windowsを実行することで取得できます。 wmic
プログラム, 、しかし、それはひどいハックです。この問題領域全体が、明らかに開かれた道路が閉鎖されていることが判明しているため、MicrosoftがHTAを検討していることの結果であるように見えます a レガシーテクノロジー, 、静かに段階的に廃止され、フルスクリーンの広告装飾用Windows8 AppStoreアプリを支持します.
とにかく、頑張ってください!