SQLの窓

2020年11月12日


HTA / ADO / Jscript : Access( .accdb .mdb ) の読み込みと表示

データベースは Access です。こちらからダウンロードしてください。ダウンロードして解凍した .accdb または .mdb へのパスは以下のようにしてソースコード上で固定で設定しています
 var db_path = "C:\\temp\\hanbaic.accdb";
ドライバが無い場合はこちらからダウンロードして AccessDatabaseEngine.exe を実行します ※ HTA は 32ビットです この HTA を localhost の IE11 で実行する事ができます。その場合は、IE11 の設定が必要です。その方法はこちらをご覧ください。 ※ IE11 で動かす最も大きな目的は、開発者ツールでデバッグができるからです。
<!DOCTYPE html>
<html>
<head>
<!-- edge : 主に hta 用 / VBScript を混在する場合は IE11 で IE10 ) -->
<meta http-equiv="x-ua-compatible" content="ie=edge">

<meta charset="utf-8">

<title>utf-8 ADO 問合せ処理</title>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/css/bootstrap.css">

<script>
// ***********************
// カンマ編集
// ***********************
String.prototype.number_format = 
function (prefix) {
	var num = this.valueOf();
	prefix = prefix || '';
	num += '';
	var splitStr = num.split('.');
	var splitLeft = splitStr[0];
	var splitRight = splitStr.length > 1 ? '.' + splitStr[1] : '';
	var regx = /(\d+)(\d{3})/;
	while (regx.test(splitLeft)) {
		splitLeft = splitLeft.replace(regx, '$1' + ',' + '$2');
	}
	return prefix + splitLeft + splitRight;
}
// ***********************
// カンマ編集削除
// ***********************
String.prototype.remove_number_format = 
function () {
	var num = this.valueOf();
	return num.replace(/([^0-9\.\-])/g, '');
}

// ********************************************************
// ADO オブジェクト
// 3 : クライアント側カーソル
// https://docs.microsoft.com/ja-jp/sql/ado/reference/ado-api/cursorlocationenum
// ********************************************************
var cn = new ActiveXObject( "ADODB.Connection" );
cn.CursorLocation = 3;
var rs = new ActiveXObject( "ADODB.Recordset" );

// ***********************
// このパスを変更
// ***********************
var db_path = "C:\\temp\\hanbaic.accdb";
// ***********************

// ********************************************************
// https://www.microsoft.com/ja-jp/download/details.aspx?id=13255 ( ドライバ )
// 接続文字列 : ODBC用
// https://docs.microsoft.com/ja-jp/dotnet/api/system.data.odbc.odbcconnection.connectionstring
// ********************************************************
var connection_string = "Provider=MSDASQL;Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" + db_path + ";";

// ***********************
// エラー制御
// ***********************
var error_flg = false;

// ***********************
// 実行 SQL
// ***********************
var query = "select * from 社員マスタ";

$(function(){

	// **************************************
	// Windows を中央に移動
	// **************************************
	var target = window.location + "";

	if ( target.indexOf("file:") != -1 ) {

		try {
			var w = screen.width - 400;
			var h = screen.height - 200;
			top.resizeTo( w, h );
			top.moveTo((screen.width-w)/2, (screen.height-h)/2 );
		}
		catch( e ) {}

	}

	// **************************************
	// ADO 処理( ここから )
	// **************************************
	try {
		// ***********************
		// DB 接続
		// ***********************
		cn.open( connection_string );
	}
	catch (e) {
		error_flg = true;
		alert(e.description);
	}
	
	if ( error_flg ) {
		return;
	}

	try {
		// ***********************
		// レコードセット取得
		// ***********************
		rs.open( query, cn );
	}
	catch (e) {
		error_flg = true;
		alert(e.description);
	}

	var table_body = $("#tbl");
	var row_unit = $("<tr></tr>");

	// ***********************
	// タイトル部用、列名取得
	// ***********************
	for( loop_idx = 0; loop_idx < rs.fields.count; loop_idx++ ) {
		$("<th></th>")
			.text( rs.fields(loop_idx).name )
			.appendTo( row_unit );
	}
	row_unit.appendTo( table_body );


	// ***********************
	// 行取得ループ
	// ***********************
	while( !rs.EOF ) {

		// 行オブジェクト
		row_unit = $("<tr></tr>");
		
		// *********************************************
		// 列オブジェクトを作成して行オブジェクトに追加
		// *********************************************
		$("<td></td>")
			.text( rs.fields("社員コード").value )
			.appendTo( row_unit );

		$("<td></td>")
			.text( rs.fields("氏名").value )
			.appendTo( row_unit );

		$("<td></td>")
			.text( rs.fields("フリガナ").value )
			.appendTo( row_unit );

		$("<td></td>")
			.text( rs.fields("所属").value )
			.appendTo( row_unit );

		$("<td></td>")
			.text( rs.fields("性別").value )
			.appendTo( row_unit );
			
		date_work = new Date( rs.fields("作成日").value );
		date_string = date_work.getFullYear() + "/" + (date_work.getMonth()+1) + "/" + date_work.getDate();
		$("<td></td>")
			.text( date_string )
			.appendTo( row_unit );

		date_work = new Date( rs.fields("更新日").value );
		date_string = date_work.getFullYear() + "/" + (date_work.getMonth()+1) + "/" + date_work.getDate();
		$("<td></td>")
			.text( date_string )
			.appendTo( row_unit );


		$("<td></td>")
			.text( rs.fields("給与").value )
			.appendTo( row_unit );

		$("<td></td>")
			.text( rs.fields("手当").value )
			.appendTo( row_unit );

		$("<td></td>")
			.text( rs.fields("管理者").value )
			.appendTo( row_unit );
			
		date_work = new Date( rs.fields("生年月日").value );
		date_string = date_work.getFullYear() + "/" + (date_work.getMonth()+1) + "/" + date_work.getDate();
		$("<td></td>")
			.text( date_string )
			.appendTo( row_unit );

		// 行オブジェクトを テーブルオブジェクトに追加
		row_unit.appendTo( table_body );

		// ***********************
		// 次の行を取得
		// ***********************
		rs.MoveNext();
	}
	
	// ***********************
	// レコードセットを閉じる
	// ***********************
	rs.close();

	// ***********************
	// 接続解除
	// ***********************
	cn.close();

	// ***********************
	// オブジェクトの解放
	// ***********************
	cn = null;
	// **************************************
	// ADO 処理( ここまで )
	// **************************************


	// **************************************
	// テーブルに対する処理
	// **************************************
	$("#tbl tr").each(function(idx){

		// **************************************
		// イベント登録
		// **************************************
		$(this).on("dblclick", function(idx){

			var text = "";

			$(this).find("td").each(function(idx){
				console.log( idx + ":" + $(this).text() );

				if ( idx == 7 || idx == 8 ) {
					text += idx + ":" + ($(this).text()).remove_number_format() + " ";
				}
				else {
					text += idx + ":" + $(this).text() + " ";
				}
			});

			$("#result").text( text );

		});

		// **************************************
		// データ部分のフォーマットと右寄せ
		// **************************************
		$(this).find("td").each(function(idx){

			switch( idx ) {
				case 7:
					$(this).css({"text-align": "right" });
					$(this).text( ($(this).text()).number_format() );
					break;
				case 8:
					$(this).css({"text-align": "right" });
					$(this).text( ($(this).text()).number_format() );
					break;
			}

		});

		// **************************************
		// タイトル部分の右寄せ
		// **************************************
		$(this).find("th").each(function(idx){

			switch( idx ) {
				case 7:
					$(this).css({"text-align": "right" });
					break;
				case 8:
					$(this).css({"text-align": "right" });
					break;
			}

		});

	});
	// **************************************
	// テーブルに対する処理
	// **************************************


});

</script>

<style>
/* ****************************
1) 列のカーソルは常に矢
2) 改行コードを有効
******************************/
td,th {
	cursor: default!important;
	white-space: pre;
}

body {
	margin: 0;
	padding: 16px;
}

/* ****************************
テーブル内のデータを選択不可
( ダブルクリック対応 )
******************************/
#tbl {
	user-select: none;
	-moz-user-select: none;
	-webkit-user-select: none;
	-ms-user-select: none;
}

/* ****************************
スクロール無しの状態時の
最上部にデータ表示場所を用意
******************************/
table {
	margin-top: 36px;
}

/* ****************************
ダブルクリック時に内容を表示
するブロックの表示方法
******************************/
#result {
	font-weight: bold;	/* 太文字 */
	color: navy;	/* 文字色 */
	position: fixed;	/* 表示位置固定 */
	height: 34px;	/* ブロック高さ */
	background-color: #fff;	/* ブロック背景色 */
	padding: 5px;	/* ブロック内側余白 */
}

</style>
</head>
<body>

	<!-- ダブルクリックの結果を表示する / fixed で位置固定 -->
	<div id="result"></div>

	<table class="table table-hover">
		<!-- bootstrap 対応の為、tbody に対して処理 -->
		<tbody id="tbl">
		</tbody>
	</table>

</body>
</html>


以下は、列情報を自動取得しています
( ※ 自由な SELECT 文で表示可能です )
<!DOCTYPE html>
<html>
<head>
<!-- edge : 主に hta 用 / VBScript を混在する場合は IE11 で IE10 ) -->
<meta http-equiv="x-ua-compatible" content="ie=edge">

<meta charset="utf-8">

<title>utf-8 ADO 問合せ処理</title>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/css/bootstrap.css">

<script>
// ***********************
// カンマ編集
// ***********************
String.prototype.number_format = 
function (prefix) {
	var num = this.valueOf();
	prefix = prefix || '';
	num += '';
	var splitStr = num.split('.');
	var splitLeft = splitStr[0];
	var splitRight = splitStr.length > 1 ? '.' + splitStr[1] : '';
	var regx = /(\d+)(\d{3})/;
	while (regx.test(splitLeft)) {
		splitLeft = splitLeft.replace(regx, '$1' + ',' + '$2');
	}
	return prefix + splitLeft + splitRight;
}
// ***********************
// カンマ編集削除
// ***********************
String.prototype.remove_number_format = 
function () {
	var num = this.valueOf();
	return num.replace(/([^0-9\.\-])/g, '');
}

// ********************************************************
// ADO オブジェクト
// 3 : クライアント側カーソル
// https://docs.microsoft.com/ja-jp/sql/ado/reference/ado-api/cursorlocationenum
// ********************************************************
var cn = new ActiveXObject( "ADODB.Connection" );
cn.CursorLocation = 3;
var rs = new ActiveXObject( "ADODB.Recordset" );

// ***********************
// このパスを変更
// ***********************
var db_path = "C:\\temp\\hanbaic.accdb";
// ***********************

// ********************************************************
// https://www.microsoft.com/ja-jp/download/details.aspx?id=13255 ( ドライバ )
// 接続文字列 : ODBC用
// https://docs.microsoft.com/ja-jp/dotnet/api/system.data.odbc.odbcconnection.connectionstring
// ********************************************************
var connection_string = "Provider=MSDASQL;Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=" + db_path + ";";

// ***********************
// エラー制御
// ***********************
var error_flg = false;

// ***********************
// 実行 SQL
// ***********************
var query = "select * from 得意先マスタ";

$(function(){

	// **************************************
	// Windows を中央に移動
	// **************************************
	var target = window.location + "";

	if ( target.indexOf("file:") != -1 ) {

		try {
			var w = screen.width - 400;
			var h = screen.height - 200;
			top.resizeTo( w, h );
			top.moveTo((screen.width-w)/2, (screen.height-h)/2 );
		}
		catch( e ) {}

	}

	// **************************************
	// ADO 処理( ここから )
	// **************************************
	try {
		// ***********************
		// DB 接続
		// ***********************
		cn.open( connection_string );
	}
	catch (e) {
		error_flg = true;
		alert(e.description);
	}
	
	if ( error_flg ) {
		return;
	}

	try {
		// ***********************
		// レコードセット取得
		// ***********************
		rs.open( query, cn );
	}
	catch (e) {
		error_flg = true;
		alert(e.description);
	}

	var table_body = $("#tbl");
	var row_unit = $("<tr></tr>");

	var typeArray = [];

	// ***********************
	// タイトル部用、列名取得
	// ***********************
	for( loop_idx = 0; loop_idx < rs.fields.count; loop_idx++ ) {
		$("<th></th>")
			.text( rs.fields(loop_idx).name )
			.appendTo( row_unit );
		typeArray.push( rs.fields(loop_idx).type );
	}
	row_unit.appendTo( table_body );


	// ***********************
	// 行取得ループ
	// データ型
	// https://docs.microsoft.com/ja-jp/sql/ado/reference/ado-api/datatypeenum
	// ***********************
	while( !rs.EOF ) {

		// 行オブジェクト
		row_unit = $("<tr></tr>");
		for( loop_idx = 0; loop_idx < rs.fields.count; loop_idx++ ) {
			if( typeArray[loop_idx] == 133 || typeArray[loop_idx] == 135 ) {
				var date_work = new Date( rs.fields(rs.fields(loop_idx).name).value );
				var date_string = date_work.getFullYear() + "/" + (date_work.getMonth()+1) + "/" + date_work.getDate();
				$("<td></td>")
					.text( date_string )
					.appendTo( row_unit );
			}
			else {
				$("<td></td>")
				.text( rs.fields(rs.fields(loop_idx).name).value )
				.appendTo( row_unit );
			}
		}
		row_unit.appendTo( table_body );

		// ***********************
		// 次の行を取得
		// ***********************
		rs.MoveNext();
	}
	
	// ***********************
	// レコードセットを閉じる
	// ***********************
	rs.close();

	// ***********************
	// 接続解除
	// ***********************
	cn.close();

	// ***********************
	// オブジェクトの解放
	// ***********************
	cn = null;
	// **************************************
	// ADO 処理( ここまで )
	// **************************************


	// **************************************
	// テーブルに対する処理
	// **************************************
	$("#tbl tr").each(function(idx){

		// **************************************
		// イベント登録
		// **************************************
		$(this).on("dblclick", function(idx){

			var text = "";

			$(this).find("td").each(function(idx){
				console.log( idx + ":" + $(this).text() );
				text += idx + ":" + $(this).text() + " ";
			});

			$("#result").text( text );

		});

		// **************************************
		// データ部分のフォーマットと右寄せ
		// **************************************
		$(this).find("td").each(function(idx){

			if ( typeArray[idx] == 3 ) {
				$(this).css({"text-align": "right" });
				$(this).text( ($(this).text()).number_format() );
			} 

		});

		// **************************************
		// タイトル部分の右寄せ
		// **************************************
		$(this).find("th").each(function(idx){

			if ( typeArray[idx] == 3 ) {
				$(this).css({"text-align": "right" });
			}

		});

	});
	// **************************************
	// テーブルに対する処理
	// **************************************


});

</script>

<style>
/* ****************************
1) 列のカーソルは常に矢
2) 改行コードを有効
******************************/
td,th {
	cursor: default!important;
	white-space: pre;
}

body {
	margin: 0;
	padding: 16px;
}

/* ****************************
テーブル内のデータを選択不可
( ダブルクリック対応 )
******************************/
#tbl {
	user-select: none;
	-moz-user-select: none;
	-webkit-user-select: none;
	-ms-user-select: none;
}

/* ****************************
スクロール無しの状態時の
最上部にデータ表示場所を用意
******************************/
table {
	margin-top: 36px;
}

/* ****************************
ダブルクリック時に内容を表示
するブロックの表示方法
******************************/
#result {
	font-weight: bold;	/* 太文字 */
	color: navy;	/* 文字色 */
	position: fixed;	/* 表示位置固定 */
	height: 34px;	/* ブロック高さ */
	background-color: #fff;	/* ブロック背景色 */
	padding: 5px;	/* ブロック内側余白 */
}

</style>
</head>
<body>

	<!-- ダブルクリックの結果を表示する / fixed で位置固定 -->
	<div id="result"></div>

	<table class="table table-hover">
		<!-- bootstrap 対応の為、tbody に対して処理 -->
		<tbody id="tbl">
		</tbody>
	</table>

</body>
</html>




タグ:HTA IE
posted by lightbox at 2020-11-12 15:20 | HTA ( HTMLアプリケーション ) | このブログの読者になる | 更新情報をチェックする

2020年10月13日


HTML Application : JavaScript で新しい Excel の Book を作成する

JavaScript から Excel にアクセスする場合、『Quit メソッドを呼び出した後、Excel がシャットダウンしない』というバグがあるのでその対応を組み込んでいます



実行後に作成された Excel Book
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta charset="utf-8">
<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">

<title>新しい Excel の Book を作成する</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.5.2/css/bootstrap.min.css" integrity="sha512-MoRNloxbStBcD8z3M/2BmnT+rg4IsMxPkXaGh2zD6LGNNFE80W3onsAhRcMAMrSoyWL9xD7Ert0men7vR8LUZg==" crossorigin="anonymous" />

<style>
/* ****************************
 上下エリア
 フィットコントロール用
******************************/
html,body {
	height: 100%;
}
/* ****************************
 それぞれのエリアの特性
******************************/
/* 基本枠 */
body {
	margin: 0;
}
/* 上固定部分 */
#head {
	padding: 16px;
	display: block;
	margin: auto;
	width: 100%;							/* 幅 */
	height: 70px;							/* 高さ */
	background-color: #e0e0e0;
}
/* 下スクロール部分 */
#extend {
	padding: 4px 16px;
	display: block;
	margin: auto;
	width: calc( 100% - 3px );				/* 幅 */
	height: calc( 100% - 70px - 2px );		/* 高さ */
	border: solid 2px #c0c0c0;
	overflow: scroll;
}

</style>

<script>
// ****************************
// Excel.Application 用
// ****************************
var Excel = null;
var Book = null;
var Worksheet = null;
// 外部プログラムの実行用
var WshShell = new ActiveXObject("WScript.Shell");
var targetPath = WshShell.ExpandEnvironmentStrings("%TEMP%") + "\\新しいBook.xlsx";

// jQuery 用専用ロードイベント
$(function(){

	$("#filepath").text( targetPath );

	// ボタンのイベント
	$("#action").on("click", function(){

		// 実行確認
		if ( !confirm("新しいBook を作成してもよろしいですが?") ) {
			return;
		}
	
		// 複数の Excel 処理を対話で続ける時の為に Excel が null の時のみ作成する方法
		// ※ 今回は必ず実行後終了させるのでこの if 文は必要ありません
		if ( Excel == null ) {
			// ****************************
			// 基本オブジェクトを作成
			// ****************************
			Excel = new ActiveXObject("Excel.Application");
		}

		// ****************************
		// 表示( テストの時は表示 )
		// 完成した場合は false にしますが、
		// なんらかのエラーが起きた場合はタスクマネージャから Excel
		// を終了させる必要があります
		// ****************************
		Excel.Visible = true;

		// ****************************
		// 警告を出さないようにする
		// 使用すると上書きの警告が
		// 出なくなります
		// ****************************
		Excel.DisplayAlerts = false;

		// ****************************
		// ブック追加
		// ****************************
		Excel.Workbooks.Add();

		// ****************************
		// 追加したブックを取得
		// ※ 新規なのて 1 番目
		// ****************************
		Book = Excel.Workbooks( Excel.Workbooks.Count );

		// ****************************
		// 先頭シートを選択する
		// 少なくとも最初に一つシートが存在します
		// ****************************
		Worksheet = Book.Worksheets( 1 );

		// ****************************
		// シート名設定
		// ( アクティブなので直接 )
		// ****************************
		Worksheet.Name = "新しい情報";

		// ****************************
		// Add では 第二引数に指定した
		// オブジェクトのシートの直後に、
		// 新しいシートを追加します。
		// ****************************
		Book.Worksheets.Add(null,Worksheet);

		// ****************************
		// シート名設定
		// ( 2番目のシート )
		// ****************************
		Book.Worksheets(2).Name = "予備情報";

		// ****************************
		// 新しい情報 シートを選択
		// ****************************
		Book.Worksheets("新しい情報").Select();

		// ****************************
		// コード列を文字列に設定
		// ****************************
		Worksheet.Columns("A:A").Select();
		Excel.Selection.NumberFormatLocal = "@";
		Worksheet.Columns("D:D").Select();
		Excel.Selection.NumberFormatLocal = "@";
		Worksheet.Columns("J:J").Select();
		Excel.Selection.NumberFormatLocal = "@";

		// ****************************
		// テーブル情報をセルへセット
		// ****************************
		// タイトル部分の参照
		$("#tbl th").each(function(idx){
			Worksheet.Cells(1, idx+1) = $(this).text();
		});

		// 行一覧の参照
		$("#tbl tr").each(function(row){
			$(this).find("td").each(function(idx){
				Worksheet.Cells(row, idx+1) = $(this).text();
			});
		});

		// ****************************
		// セルをデータに合わせて
		// 整理して左上を選択
		// ****************************
		Worksheet.Columns("A:K").Select();
		Worksheet.Columns("A:K").EntireColumn.AutoFit();
		Worksheet.Range("A1").Select();

		// ****************************
		// 保存
		// 拡張子を .xls で保存するには
		// Call ExcelBook.SaveAs( FilePath, 56 ) とします
		// ****************************
		var filePath = $("#filepath").text();

		try {
			Book.SaveAs( filePath );
			Book.Close();
		}
		catch (e) {
			alert("Book.SaveAs でエラーが発生しました");

			console.dir(e);
			ExcelQuit();
			return;
		}

		// Excel の完全終了
		ExcelQuit();

		// ****************************
		// 終了確認
		// ****************************
		alert("処理が終了しました \n\n 保存したブックを開きます");

		// ****************************
		// Windows からの Excel 起動
		// ****************************
		WshShell.Run( "RunDLL32.EXE shell32.dll,ShellExec_RunDLL " + filePath );

	});

});

// ****************************
// JavaScript による
// Excel の完全終了処理
// ****************************
var idTmr = "";
function ExcelQuit() {
	Excel.Quit();
	Excel = null;
	idTmr = window.setTimeout("Cleanup();",1);
}
function Cleanup() {
	window.clearInterval(idTmr);
 	CollectGarbage();
}
</script>
</head>
<body>
	<div id="head">
		<input id="action" type="button" value="ブックの作成" class="btn btn-primary"> <span class="ml-5" id="filepath">c:\temp\新しいBook.xlsx</span>
	</div>

	<div id="extend">
		<table class="table table-striped">
		<tbody id="tbl">
			<tr><th>社員コード</th><th>氏名</th><th>フリガナ</th><th>所属</th><th>性別</th><th>作成日</th><th>更新日</th><th>給与</th><th>手当</th><th>管理者</th><th>生年月日</th></tr>
			
			<tr><td>0001</td><td>山田 太郎</td><td>ウラオカ トモヤ</td><td>0003</td><td>0</td><td>2005-09-12</td><td>2005-11-28</td><td>400000</td><td>9000</td><td>0001</td><td>2012/03/21</td></tr>
			<tr><td>0002</td><td>山村 洋代</td><td>ヤマムラ ヒロヨ</td><td>0003</td><td>1</td><td>2005-06-17</td><td>2005-09-18</td><td>300000</td><td></td><td>0001</td><td>2001/01/02</td></tr>
			<tr><td>0003</td><td>多岡 冬行</td><td>タオカ フユユキ</td><td>0002</td><td>0</td><td>2005-08-14</td><td>2005-11-14</td><td>250000</td><td></td><td>0001</td><td>2001/01/01</td></tr>
			<tr><td>0004</td><td>高田 冬美</td><td>タカタ フユミ</td><td>0003</td><td>1</td><td>2005-06-13</td><td>2005-10-05</td><td>250000</td><td></td><td>0001</td><td>2001/01/01</td></tr>
			<tr><td>0005</td><td>内高 友之</td><td>ウチタカ トモユキ</td><td>0003</td><td>0</td><td>2005-09-12</td><td>2005-11-10</td><td>150000</td><td></td><td></td><td>2001/01/01</td></tr>

		</tbody>
		</table>

	</div>

</body>
</html>


▼ 以下の設定を IE11 で行うと、拡張子を .html に変更して IE11 でも実行できます






このページの PDF



posted by lightbox at 2020-10-13 09:54 | HTA ( HTMLアプリケーション ) | このブログの読者になる | 更新情報をチェックする

2020年05月14日


HTML Application : JavaScript で Windows のいろいろなフォルダを開く

もともと、VBScript( WMI ) を使用して shell: で使用される文字列を全て取得して、動作するものを選択して JavaScript で動くようにしたものです。なので、拡張子が html のものを ActiveX を利用可能にした IE11 で WEB 上で表示しても実行できます。

アプリケーションの実行は、どういうわけか WScript.Shell ではなく Shell.Application を使用したほうが正しく動作しました。






<!DOCTYPE html>
<html>
<head>
<meta http-equiv="x-ua-compatible" content="ie=edge">
<meta charset="utf-8">
<meta content="width=device-width initial-scale=1.0 minimum-scale=1.0 maximum-scale=1.0 user-scalable=no" name="viewport">

<title>Windiows のフォルダを開く</title>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.4.1/css/bootstrap.css">
<style>
body {
	padding: 10px;
	
}
.btn {
	text-align:left;
	width: 300px;
}
.desc {
	margin-left: 20px;
}
</style>
<script language='jscript'>
var WshShell = new ActiveXObject("WScript.Shell");
var Shell = new ActiveXObject("Shell.Application");
</script>
</head>
<body>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:MyComputerFolder' onclick='Shell.Explore("shell:MyComputerFolder")' language='jscript'><span class='desc'>PC</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:ControlPanelFolder' onclick='Shell.Explore("shell:ControlPanelFolder")' language='jscript'><span class='desc'>コントロール パネル\すべてのコントロール パネル項目</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Local Documents' onclick='Shell.Explore("shell:Local Documents")' language='jscript'><span class='desc'>ドキュメント</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:SendTo' onclick='Shell.Explore("shell:SendTo")' language='jscript'><span class='desc'></span>C:\Users\ユーザ名\AppData\Roaming\Microsoft\Windows\SendTo</div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Startup' onclick='Shell.Explore("shell:Startup")' language='jscript'><span class='desc'>C:\Users\ユーザ名\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Common Startup' onclick='Shell.Explore("shell:Common Startup")' language='jscript'><span class='desc'>C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Downloads' onclick='Shell.Explore("shell:Downloads")' language='jscript'><span class='desc'>ダウンロード</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Desktop' onclick='Shell.Explore("shell:Desktop")' language='jscript'><span class='desc'>デスクトップ</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:My Pictures' onclick='Shell.Explore("shell:My Pictures")' language='jscript'><span class='desc'>ピクチャ</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:AppData' onclick='Shell.Explore("shell:AppData")' language='jscript'><span class='desc'>C:\Users\ユーザ名\AppData\Roaming</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Common AppData' onclick='Shell.Explore("shell:Common AppData")' language='jscript'><span class='desc'>C:\ProgramData</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:AppsFolder' onclick='Shell.Explore("shell:AppsFolder")' language='jscript'><span class='desc'>Applications</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:PrintersFolder' onclick='Shell.Explore("shell:PrintersFolder")' language='jscript'><span class='desc'>すべてのコントロール パネル項目\プリンター</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Start Menu' onclick='Shell.Explore("shell:Start Menu")' language='jscript'><span class='desc'>C:\Users\ユーザ名\AppData\Roaming\Microsoft\Windows\Start Menu</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Recent' onclick='Shell.Explore("shell:Recent")' language='jscript'><span class='desc'>C:\Users\ユーザ名\AppData\Roaming\Microsoft\Windows\Recent</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:System' onclick='Shell.Explore("shell:System")' language='jscript'><span class='desc'>C:\Windows\System32</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:SystemX86' onclick='Shell.Explore("shell:SystemX86")' language='jscript'><span class='desc'>C:\Windows\SysWOW64</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Windows' onclick='Shell.Explore("shell:Windows")' language='jscript'><span class='desc'>C:\Windows</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:ProgramFiles' onclick='Shell.Explore("shell:ProgramFiles")' language='jscript'><span class='desc'>C:\Program Files (x86)</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Common Documents' onclick='Shell.Explore("shell:Common Documents")' language='jscript'><span class='desc'>C:\Users\Public\Documents</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Quick Launch' onclick='Shell.Explore("shell:Quick Launch")' language='jscript'><span class='desc'>C:\Users\ユーザ名\AppData\Roaming\Microsoft\Internet Explorer\Quick Launch</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Templates' onclick='Shell.Explore("shell:Templates")' language='jscript'><span class='desc'>C:\Users\ユーザ名\AppData\Roaming\Microsoft\Windows\Templates</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:RecycleBinFolder' onclick='Shell.Explore("shell:RecycleBinFolder")' language='jscript'><span class='desc'>ごみ箱</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Common Administrative Tools' onclick='Shell.Explore("shell:Common Administrative Tools")' language='jscript'><span class='desc'>C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Administrative Tools</span></div>
<br><br>

<div><input type='button' class='btn btn-outline-primary mb-2' value='C:\Program Files' onclick='Shell.Explore("C:\\Program Files")' language='jscript'><span class='desc'>C:\Program File</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='%TEMP%' onclick='Shell.Explore(WshShell.ExpandEnvironmentStrings("%TEMP%"))' language='jscript'><span class='desc'>C:\Users\ユーザ名\AppData\Local\Temp</span></div>
<div><input type='button' class='btn btn-outline-primary mb-2' value='hosts のあるフォルダ' onclick='Shell.Explore("C:\\Windows\\System32\\drivers\\etc")' language='jscript'><span class='desc'>C:\Windows\System32\drivers\etc</span></div>

<br><br>
<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:3D Objects' onclick='Shell.Explore("shell:3D Objects")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:AccountPictures' onclick='Shell.Explore("shell:AccountPictures")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:AddNewProgramsFolder' onclick='Shell.Explore("shell:AddNewProgramsFolder")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Administrative Tools' onclick='Shell.Explore("shell:Administrative Tools")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:Application Shortcuts' onclick='Shell.Explore("shell:Application Shortcuts")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:Cache' onclick='Shell.Explore("shell:Cache")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Camera Roll' onclick='Shell.Explore("shell:Camera Roll")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:CD Burning' onclick='Shell.Explore("shell:CD Burning")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:Common Desktop' onclick='Shell.Explore("shell:Common Desktop")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Common Programs' onclick='Shell.Explore("shell:Common Programs")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:Common Start Menu' onclick='Shell.Explore("shell:Common Start Menu")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:Common Templates' onclick='Shell.Explore("shell:Common Templates")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:CommonDownloads' onclick='Shell.Explore("shell:CommonDownloads")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:CommonMusic' onclick='Shell.Explore("shell:CommonMusic")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:CommonPictures' onclick='Shell.Explore("shell:CommonPictures")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:CommonRingtones' onclick='Shell.Explore("shell:CommonRingtones")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:CommonVideo' onclick='Shell.Explore("shell:CommonVideo")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:ConnectionsFolder' onclick='Shell.Explore("shell:ConnectionsFolder")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Contacts' onclick='Shell.Explore("shell:Contacts")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:Cookies' onclick='Shell.Explore("shell:Cookies")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:CredentialManager' onclick='Shell.Explore("shell:CredentialManager")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:CryptoKeys' onclick='Shell.Explore("shell:CryptoKeys")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:Device Metadata Store' onclick='Shell.Explore("shell:Device Metadata Store")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:DocumentsLibrary' onclick='Shell.Explore("shell:DocumentsLibrary")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:DpapiKeys' onclick='Shell.Explore("shell:DpapiKeys")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:Favorites' onclick='Shell.Explore("shell:Favorites")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:Fonts' onclick='Shell.Explore("shell:Fonts")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:GameTasks' onclick='Shell.Explore("shell:GameTasks")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:History' onclick='Shell.Explore("shell:History")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:HomeGroupFolder' onclick='Shell.Explore("shell:HomeGroupFolder")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:ImplicitAppShortcuts' onclick='Shell.Explore("shell:ImplicitAppShortcuts")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:Libraries' onclick='Shell.Explore("shell:Libraries")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:Links' onclick='Shell.Explore("shell:Links")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Local AppData' onclick='Shell.Explore("shell:Local AppData")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:Local Downloads' onclick='Shell.Explore("shell:Local Downloads")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:UsersLibrariesFolder' onclick='Shell.Explore("shell:UsersLibrariesFolder")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Local Music' onclick='Shell.Explore("shell:Local Music")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:Local Pictures' onclick='Shell.Explore("shell:Local Pictures")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:Local Videos' onclick='Shell.Explore("shell:Local Videos")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:LocalAppDataLow' onclick='Shell.Explore("shell:LocalAppDataLow")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:MusicLibrary' onclick='Shell.Explore("shell:MusicLibrary")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:My Music' onclick='Shell.Explore("shell:My Music")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:My Video' onclick='Shell.Explore("shell:My Video")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:NetHood' onclick='Shell.Explore("shell:NetHood")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:NetworkPlacesFolder' onclick='Shell.Explore("shell:NetworkPlacesFolder")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:OneDrive' onclick='Shell.Explore("shell:OneDrive")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:OneDriveCameraRoll' onclick='Shell.Explore("shell:OneDriveCameraRoll")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:OneDriveDocuments' onclick='Shell.Explore("shell:OneDriveDocuments")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:OneDriveMusic' onclick='Shell.Explore("shell:OneDriveMusic")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:OneDrivePictures' onclick='Shell.Explore("shell:OneDrivePictures")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:PicturesLibrary' onclick='Shell.Explore("shell:PicturesLibrary")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:PrintHood' onclick='Shell.Explore("shell:PrintHood")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:Profile' onclick='Shell.Explore("shell:Profile")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:ProgramFilesX86' onclick='Shell.Explore("shell:ProgramFilesX86")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:ProgramFilesCommon' onclick='Shell.Explore("shell:ProgramFilesCommon")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:ProgramFilesCommonX86' onclick='Shell.Explore("shell:ProgramFilesCommonX86")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:Programs' onclick='Shell.Explore("shell:Programs")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Public' onclick='Shell.Explore("shell:Public")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:PublicAccountPictures' onclick='Shell.Explore("shell:PublicAccountPictures")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:PublicGameTasks' onclick='Shell.Explore("shell:PublicGameTasks")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:PublicLibraries' onclick='Shell.Explore("shell:PublicLibraries")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:ResourceDir' onclick='Shell.Explore("shell:ResourceDir")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:Roaming Tiles' onclick='Shell.Explore("shell:Roaming Tiles")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:Ringtones' onclick='Shell.Explore("shell:Ringtones")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:SavedGames' onclick='Shell.Explore("shell:SavedGames")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:SavedPictures' onclick='Shell.Explore("shell:SavedPictures")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:SavedPicturesLibrary' onclick='Shell.Explore("shell:SavedPicturesLibrary")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:Screenshots' onclick='Shell.Explore("shell:Screenshots")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:Searches' onclick='Shell.Explore("shell:Searches")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:SearchHomeFolder' onclick='Shell.Explore("shell:SearchHomeFolder")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:SystemCertificates' onclick='Shell.Explore("shell:SystemCertificates")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:ThisDeviceFolder' onclick='Shell.Explore("shell:ThisDeviceFolder")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:ThisPCDesktopFolder' onclick='Shell.Explore("shell:ThisPCDesktopFolder")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:User Pinned' onclick='Shell.Explore("shell:User Pinned")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:UserProfiles' onclick='Shell.Explore("shell:UserProfiles")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:UserProgramFiles' onclick='Shell.Explore("shell:UserProgramFiles")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:UserProgramFilesCommon' onclick='Shell.Explore("shell:UserProgramFilesCommon")' language='jscript'><span class='desc'></span>
<input type='button' class='btn btn-outline-primary mb-2' value='shell:UsersFilesFolder' onclick='Shell.Explore("shell:UsersFilesFolder")' language='jscript'><span class='desc'></span></div>

<div><input type='button' class='btn btn-outline-primary mb-2' value='shell:VideosLibrary' onclick='Shell.Explore("shell:VideosLibrary")' language='jscript'><span class='desc'></span></div>
</body>
</html>



IE11 の設定






このページの PDF



posted by lightbox at 2020-05-14 19:26 | HTA ( HTMLアプリケーション ) | このブログの読者になる | 更新情報をチェックする

2018年07月31日


HTA (または IE11) で フォルダ選択ダイアログからフォルダとファイルの一覧


IE11 での実行には設定が必要です => HTA(HTMLアプリケーション) のコードを html として IE11 でデバッグする方法
※ newObject 関数は、hta.js で定義しています。 ▼ BrowseForFolder メソッド
var objFolder = objShell.BrowseForFolder( 0, "フォルダ選択", 1, 0 );
フォルダ参照 第1引数は、本来はウインドウハンドルを渡すものですが、こでは 0 を設定します。 第2引数は、タイトルの下に表示される文字列です。 第3引数は、BROWSEINFO structure の ulFlags の内容ですが実際はここに書いてある通りになはならないので試してみる他ありません。ここでは、1 を渡しており、意味は( Only return file system directories. If the user selects folders that are not part of the file system, the OK button is grayed ) です。=> ファイルシステム以外だと OK ボタンが 灰色になって使用できません 第4引数は、ShellSpecialFolderConstants のフォルダを渡して、そのフォルダを一番上のフォルダにします。=> ここでは、0 なのでデスクトップです。 一覧作成 フォルダオブジェクトを取得して、Items メソッドで下位のファイルとフォルダのコレクション( FolderItems オブジェクト )を取得します。 さらに、FolderItems オブジェクト の Item メソッドFolderItem オブジェクトを取得します。 IsFolder プロパティName プロパティを使用して一覧を作成します Name プロパティは、配列にセットして sort メソッドでソートしてから、区切りとルートフォルダのパスをセットしてテーブル要素に表示します Self プロパティは 仕様上は Folder2 オブジェクトとなります ▼ HTA(HTML アプリケーション) : pcname-from-stdout.hta ▼ IE11 : pcname-from-stdout.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="x-ua-compatible" content="ie=edge" />
<meta http-equiv="Content-type" content="text/html; charset=utf-8"><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="https://winofsql.jp/hta.js"></script>

<script>

	// ウインドウの位置とサイズ
	centerWindow( 1100, 600 );

	// Windows Shaell
	var objShell = newObject("Shell.Application");

	$(function(){
	
		// ***************************
		// ボタン表示位置微調整
		// ***************************
		$( ".btn" ).css({
			"margin-top": "-4px"
		});
	
		// ***************************
		// フォルダの選択後
		// フォルダ内の一覧
		// ***************************
		$("#act1").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 );

		});

	});

</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: 120px;
	background-color: #e0e0e0;
}
#extend {
	padding: 4px 16px;
	display: block;
	margin-left: auto;
	margin-right: auto;
	width: calc( 100% - 3px );
	height: calc( 100% - 120px - 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="フォルダ選択(Shell.Application)">

	</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




posted by lightbox at 2018-07-31 20:03 | HTA ( HTMLアプリケーション ) | このブログの読者になる | 更新情報をチェックする

2018年07月28日


HTA (または IE11) で hostname を実行して標準出力からPC名の取得


IE11 での実行には設定が必要です => HTA(HTMLアプリケーション) のコードを html として IE11 でデバッグする方法
コマンドプロンプトベースのアプリケーションを実行するので、一瞬コマンドプロンプトが現れます。その後、コマンドプロンプトに表示された内容を取得する方法です。 ※ StdOut は、TextStream オブジェクトのメソッドで処理に該当するものが使えます。 ※ WshScriptExec オブジェクト ▼ HTA(HTML アプリケーション) : pcname-from-stdout.hta ▼ IE11 : pcname-from-stdout.html
<!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");

	$(function(){
	
		// ***************************
		// ボタン表示位置微調整
		// ***************************
		$( ".btn" ).css({
			"margin-top": "-4px"
		});
	
		// ***************************
		// hostname を実行して
		// 結果を取得する
		// ***************************
		$("#act1").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: 120px;
	background-color: #e0e0e0;
}
#extend {
	padding: 4px 16px;
	display: block;
	margin-left: auto;
	margin-right: auto;
	width: calc( 100% - 3px );
	height: calc( 100% - 120px - 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="hostname を実行して標準出力から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 );
	
	}

}





posted by lightbox at 2018-07-28 22:28 | HTA ( HTMLアプリケーション ) | このブログの読者になる | 更新情報をチェックする

2018年07月24日


HTA : 『x-frame-options: SAMEORIGIN』の設定されていないページの情報を IFRAME 内に表示して jQuery で取り出す / iframe内 参照と .clone() と .end()

レスポンスヘッダーに x-frame-options: SAMEORIGIN が設定されているとそのページは同一ドメインでないと IFRAME に読み込んで表示する事ができません。

さらに、x-frame-options: SAMEORIGIN が設定されていなくても、通常のブラウザであれば表示する事はできても、JavaScript でアクセスする事ができません。

IFRAME 内に x-frame-options: SAMEORIGIN の設定されていない WEB ページを表示してかつ、JavaScript で値を取り出せるのは HTA だけです。





<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>
// *************************************
// デスクトップ中央
// *************************************
function centerWindow( w, h ) {

	// ウインドウの位置とサイズ
	top.resizeTo( w, h );
	top.moveTo((screen.width-w)/2, (screen.height-h)/2 )

}
</script>

<script>

	// ウインドウの位置とサイズ
	centerWindow( 860, 600 );

	// テーブルの行作成用
	var row_data = "";

	$(function(){

		// レジストリキーの値一覧
		$("#act").on("click", function(){
		
			var domdoc = $("iframe[name='extend']").get(0).contentWindow.document;

			$(domdoc).find("#datalist p").each( function(idx){
			
				row_data = $("<tr></tr>")
					.addClass("row_data")
					.appendTo( "#tbl" );

				// 複製を取得して複製内の span を削除して
				// .end() で参照を p_clone に戻す
				var p_clone = $(this).clone().find("span").remove().end();
				// 複製内の span を削除 
				
				// p 内にある span のテキスト
				$("<td></td>")
					.text($(this).find("span").text())
					.appendTo( row_data );

				// span が削除された p 内のテキスト
				$("<td></td>")
					.text(p_clone.text())
					.appendTo( row_data );

			});

		});

		// 再表示
		$("#view").on("click", function(){
			location.reload(true);
		});

		// IE のドキュメントモードを表示
		$("<div></div>")
			.text( document.documentMode )
			.css( { "float" : "right", "color": "#808080", "font-size": "8px" } )
			.insertBefore( $("p").eq(0) );
			

		// ボタン表示位置微調整
		$( ".btn" ).css({
			"margin-top": "-4px"
		});
			
		
	});

</script>

<style>
/* ブロックを左右に表示  */
.ttl {
	display: inline-block;
	width: 230px;
	vertical-align: top;
}
.entry {
	display: inline-block;
}
.line {
	margin-bottom: 0;
}

#head {
	padding: 16px;
}

/* DIV を Window 下部にフィット  */
html,body {
	height: 100%;
}

body {
	margin: 0;
}
#head {
	padding: 16px;
	width: 100%;
	height: 120px;
	background-color: #e0e0e0;
}
.extend {
	padding: 4px 16px;
	display: block;
	margin-left: auto;
	margin-right: auto;
	width: calc( 100% - 3px );
	height: calc( 100% - 120px - 2px );
	border: solid 2px #c0c0c0;
	overflow: scroll;
}

/* テーブルのカーソル用  */
.row_data td, .row_data th {
	cursor: default!important;
	white-space: pre;
}

</style>
</head>
<body>
<div id="head">

	<p class="ttl">
		外部IFRAMEの内容を取り出す
	</p>

	<p class="entry">
		<input
			id="act"
			class="ml-4 btn btn-outline-primary"
			type="button"
			value="一覧表示">

		<input
			class="ml-4 btn btn-info btn-sm"
			id="view"
			type="button"
			value="再表示">
	</p>
	<p class="line"></p>

	<h4 class="text-danger"></h4>

</div>
<div class="extend">
	<table class="table table-hover">
		<tbody id="tbl">
		</tbody>
	</table>
<br>
</div>

<iframe class="extend" name="extend" APPLICATION="yes" src="https://lightbox.sakura.ne.jp/demo/iframe_target.html"></iframe>

</body>
</html>


jQuery でテキストノードの文字列を取り出す

以下のような HTML では、テキスト がテキストノードにあたります。テキスト2 はテキストノードでは無いので、a に対するセレクタで取得できますが、テキストと同様の方法で取り出します。

参考 : [Javascript] jQueryでテキストノードを選択するにはどうすればよいですか?
<div id="datalist">
	<p><span>18/07/23</span>テキスト</p>
	<p><span>18/07/22</span>テキスト</p>
	<p><span>18/07/18</span>テキスト</p>
	<p><span>18/07/16</span><a href="URL">テキスト2</a></p>
	<p><span>18/07/15</span><a href="URL">テキスト2</a></p>
	<p><span>18/07/15</span><a href="URL">テキスト2</a></p>
</div></body>


IFRAME 内のドキュメント参照と .clone() と .end()

1) var domdoc = $("iframe[name='extend']").get(0).contentWindow.document で、DOM として IFRAME 内の document を取得します

2) テキストノードを取得する為に span を削除する必要があるので、clone() で同じものを作成してその中から span を削除します

3) 削除した段階で、参照が span に移行しているので、end() で一つ前に戻って、そこから text() でデータを取得します
var domdoc = $("iframe[name='extend']").get(0).contentWindow.document;

$(domdoc).find("#datalist p").each( function(idx){

	row_data = $("<tr></tr>")
		.addClass("row_data")
		.appendTo( "#tbl" );

	// 複製を取得して複製内の span を削除して
	// .end() で参照を p_clone に戻す
	var p_clone = $(this).clone().find("span").remove().end();
	// 複製内の span を削除 
	
	// p 内にある span のテキスト
	$("<td></td>")
		.text($(this).find("span").text())
		.appendTo( row_data );

	// span が削除された p 内のテキスト
	$("<td></td>")
		.text(p_clone.text())
		.appendTo( row_data );

});


WEB ページのデータを HTA で自動的に取得したい場合、x-frame-options: SAMEORIGIN がなければそのまま使えます。しかし、一般的には欲しいページをダウンロードしてローカルに置いて読み込めば全てのページのデータをある程度自動取得できます。




posted by lightbox at 2018-07-24 23:57 | HTA ( HTMLアプリケーション ) | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します
container 終わり



フリーフォントで簡単ロゴ作成
フリーフォントでボタン素材作成
フリーフォントで吹き出し画像作成
フリーフォントではんこ画像作成
ほぼ自由に利用できるフリーフォント
フリーフォントの書体見本とサンプル
画像を大きく見る為のウインドウを開くボタンの作成

CSS ドロップシャドウの参考デモ
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり