大昔に作成した COM で、BatchHelper オブジェクト
HTA は 32ビットなので当然動きますが、特殊設定の IE11 でも動作します
BatchHelper のメソッド一覧
sample2.hta
フォルダ選択は、BatchHelper と Shell.Application を使用して二通り。Shell.Application 側では Shell.Application でファイル一覧とフォルダ一覧を取得しています。また、BatchHelper からメモ帳を起動してテキストを追加貼り付けします( テキスト内の \n で改行コード )
WScript.Network では、コンピュータ名を取得して 自分の PC に共有を C で作成してその中のフォルダとファイルの一覧を Scripting.FileSystemObject を使用して取得しています。
IE11 で\\pcname\共有... のリンクでエクスプローラが開きますが、これを使用すると直接の操作が可能です。
詳細な処理は、Shell.Application のほうが優れていますが、いろいろ解りにくい仕様になっています。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.1.1/css/bootstrap.css" />
<link rel="stylesheet" href="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/themes/smoothness/jquery-ui.css">
<script src="https://ajax.googleapis.com/ajax/libs/jqueryui/1.12.1/jquery-ui.min.js"></script>
<script src="hta.js"></script>
<script>
// ウインドウの位置とサイズ
centerWindow( 1100, 600 );
// WSH 標準
var WshShell = newObject("WScript.Shell");
var WshNetwork = newObject("WScript.Network");
// 連想配列=ハッシュ=ディクショナリ
var Dict = newObject("Scripting.Dictionary");
// DB
var AdoCn = newObject("ADODB.Connection");
var AdoRs = newObject("ADODB.Recordset");
var AdoCat = newObject("ADOX.Catalog");
// バイナリデータ
var AdoStream = newObject("ADODB.Stream");
// Windows Shell
var objShell = newObject("Shell.Application");
// テキストファイル
var Fso = newObject("Scripting.FileSystemObject");
// メール送信
var Cdo = newObject("CDO.Message");
// 通信
var Http = newObject("Msxml2.ServerXMLHTTP");
// Base64
var Util = newObject("CAPICOM.Utilities");
// その他
var Guid = newObject("Scriptlet.TypeLib");
// 以下 要インストール
var Helper = newObject("Lbox.BatchHelper");
$(function(){
// ***************************
// ボタン表示位置微調整
// ***************************
$( ".btn" ).css({
"margin-top": "-4px"
});
// ***************************
// フォルダの選択
// ***************************
$("#act1").on("click", function(){
if ( Helper == null ) {
alert("BatchHelper はインストールされていません");
return;
}
var path = Helper.GetFolderName( "フォルダの選択" );
if( path == "" ) {
alert("フォルダの選択がキャンセルされました");
return;
}
var pathArray = [ path ];
loadTable( pathArray );
});
// ***************************
// フォルダの選択後
// フォルダ内の一覧
// ***************************
$("#act2").on("click", function(){
// 1:0固定, 2:タイトル, 3:ファイルシステムのみ, 4:ルートがデスクトップ
var objFolder = objShell.BrowseForFolder( 0, "フォルダ選択", 1, 0 );
if ( objFolder == null ) {
alert("フォルダの選択がキャンセルされました");
return;
}
if ( !objFolder.Self.IsFileSystem ) {
alert("ファイルシステムではありません");
return;
}
var objFolderItems = objFolder.Items();
var arrData = [];
var nFiles = objFolderItems.Count;
for( i = 0; i < nFiles; i++ ) {
var objItem = objFolderItems.Item(i)
if ( objItem.isFolder ) {
arrData.push( " [" + objItem.Name +"]" );
}
else {
arrData.push( objItem.Name );
}
}
arrData.sort();
arrData.unshift("-------------------------------------------------------------");
arrData.unshift(objFolder.Self.Path);
loadTable( arrData );
});
// ***************************
// メモ帳を起動して
// 文字列を貼り付ける
// ***************************
$("#act3").on("click", function(){
if ( Helper == null ) {
alert("BatchHelper はインストールされていません");
return;
}
var str = prompt("入力してください","");
if( str == null ) {
alert("入力されませんでした");
return;
}
Helper.CopyToMemo( str.replace("\\n", "\r\n") );
var arrData = [ str ];
loadTable( arrData );
});
// ***************************
// PC名を取得
// ***************************
$("#act4").on("click", function(){
var arrData = [ WshNetwork.ComputerName ];
var objFolder = Fso.GetFolder( "\\\\" + arrData[0] + "\\c" );
var objItems = objFolder.SubFolders;
var objEnum = new Enumerator(objItems);
while( !objEnum.atEnd() ) {
arrData.push( objEnum.item() );
objEnum.moveNext();
}
objItems = objFolder.Files;
objEnum = new Enumerator(objItems);
while( !objEnum.atEnd() ) {
arrData.push( objEnum.item() );
objEnum.moveNext();
}
loadTable( arrData );
});
// ***************************
// hostname を実行して
// 結果を取得する
// ***************************
$("#act5").on("click", function(){
var oExec = WshShell.Exec("hostname");
var str = "";
str += oExec.StdOut.ReadAll();
var arrData = [ str ];
loadTable( arrData );
});
});
</script>
<style>
html,body {
height: 100%;
}
body {
margin: 0;
}
/* ブロックを左右に表示 */
.ttl {
display: inline-block;
width: 120px;
vertical-align: top;
}
.entry {
display: inline-block;
}
.line {
margin-bottom: 0;
}
#head {
padding: 16px;
}
/* IFRAMEコントロール用 */
#head {
padding: 16px;
width: 100%;
height: 220px;
background-color: #e0e0e0;
}
#extend {
padding: 4px 16px;
display: block;
margin-left: auto;
margin-right: auto;
width: calc( 100% - 3px );
height: calc( 100% - 220px - 2px );
border: solid 2px #c0c0c0;
overflow: scroll;
}
.row_data td {
cursor: default!important;
}
</style>
</head>
<body>
<div id="head">
<p class="ttl">
ダイアログ
</p>
<p class="entry">
<input
id="act1"
class="ml-4 btn btn-outline-primary"
type="button"
value="フォルダを選択する(BatchHelper)">
<input
id="act2"
class="ml-4 btn btn-outline-primary"
type="button"
value="フォルダ選択(Shell.Application)">
</p>
<p class="line"></p>
<p class="ttl">
</p>
<p class="entry">
<input
id="act3"
class="ml-4 btn btn-outline-primary"
type="button"
value="文字列をメモ帳を開いて貼り付ける(BatchHelper)">
<input
id="act4"
class="ml-4 btn btn-outline-primary"
type="button"
value="PC名の取得からネットワーク共有内の一覧">
</p>
<p class="line"></p>
<p class="ttl">
</p>
<p class="entry">
<input
id="act5"
class="ml-4 btn btn-outline-primary"
type="button"
value="標準出力からPC名の取得">
</p>
<p class="line"></p>
<h4 class="text-danger"></h4>
</div>
<div id="extend">
<table class="table table-hover">
<tbody id="tbl">
</tbody>
</table>
<br>
</div>
</body>
</html>
hta.js
// *************************************
// ウインドウの位置とサイズ
// *************************************
function baseWindow( x, y, w, h ) {
top.moveTo( x, y );
top.resizeTo( w, h );
}
// *************************************
// デスクトップ中央
// *************************************
function centerWindow( w, h ) {
// ウインドウの位置とサイズ
top.resizeTo( w, h );
top.moveTo((screen.width-w)/2, (screen.height-h)/2 )
}
// *************************************
// CreateObject
// *************************************
function newObject( className ) {
var obj;
try {
obj = new ActiveXObject( className );
}
catch (e) {
obj = null;
}
return obj;
}
// *************************************
// テーブル作成
// *************************************
function loadTable( arrayData ) {
var row_data = "";
// テーブル表示リセット
$("#tbl .row_data").remove();
var len = arrayData.length;
for( i = 0; i < len; i++ ) {
row_data = $("<tr></tr>")
.addClass("row_data")
.appendTo( "#tbl" );
$("<td></td>")
.text(arrayData[i])
.appendTo( row_data );
}
}
関連する記事
HTA + JavaScript + COM / ( その1 ) : BatchHelper(32ビット) と テキストファイル読み込みとプリンタ一覧
HTA (または IE11) で hostname を実行して標準出力からPC名の取得
posted by
at 2018-07-28 22:57
|
HTA ( HTMLアプリケーション )
|
|