SQLの窓 イラストAC フリー素材

2018年07月31日

HTA + JavaScript + COM / ( その3 ) : BatchHelper(32ビット) と Excel ブック作成と Sleep と Access(.accdb) 作成





大昔に作成した COM で、BatchHelper オブジェクト



HTA は 32ビットなので当然動きますが、特殊設定の IE11 でも動作します

BatchHelper のメソッド一覧

sample3.hta

ファイルに保存するダイアログは、BatchHelper オブジェクトです。一般的な Windows の COM にはありません。それを使用して、Excel のブックを作成するのに、Lbox.BatchWsc( CreateBook ) を使用していますが、これは Windows Script Component と言って、VBScript で書いたコードを COM として登録したものです。ですから、内部では Excel.Application を使用しています。

BatchHelper の Sleep は C++ で書いたもので、Window そのものも停止します。二つ目は、TIMEOUT を起動してその終了を待たせて Sleep をしていますが、Window の処理(メッセージ)は止まりません。

最後は、ADOX で Access の .accdb ファイルを作成しています。

<!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="https://winofsql.jp/hta.js"></script>

<script>

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

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

	// 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");
	var HelperWsc = newObject("Lbox.BatchWsc");

	$(function(){
	
		// ***************************
		// ボタン表示位置微調整
		// ***************************
		$( ".btn" ).css({
			"margin-top": "-4px"
		});
	
		$("#act1").on("click", function(){
			if ( Helper == null ) {
				alert("BatchHelper はインストールされていません");
				return;
			}

			var filePath = Helper.SaveFileName( "ファイルの選択", "Excel,*.xlsx", "", "", "" );
			if( filePath == "" ) {
				alert("ファイルの保存参照がキャンセルされました")
				return;
			}
			
			HelperWsc.CreateBook( filePath );

			var messageArray = [ filePath + ".xlsx" ];
			loadTable( messageArray );

		});

		$("#act2").on("click", function(){

			if ( Helper == null ) {
				alert("BatchHelper はインストールされていません");
				return;
			}

			// ※ Window も停止する
			Helper.Sleep = 3000;

			alert("Sleep が終了しました");

			var messageArray = [];
			messageArray.push("現在のスレッドの実行 を3000 ミリ秒停止しました");
			messageArray.push("※ Window も停止する");
			
			loadTable( messageArray );

		});
		
		$("#act3").on("click", function(){

			// 3秒間の停止( コマンドプロンプトウインドウを表示しない )
			// ※ Window は停止しない
			WshShell.Run("TIMEOUT /T 3", 0, true);

			alert("停止 が終了しました");
			
			var messageArray = [];
			messageArray.push("3秒間の停止( コマンドプロンプトウインドウを表示しない )");
			messageArray.push("※ Window は停止しない");
			
			loadTable( messageArray );

		});

		$("#act4").on("click", function(){

			if ( Helper == null ) {
				alert("BatchHelper はインストールされていません");
				return;
			}

			var filePath = Helper.SaveFileName( "ファイルの選択", "Access,*.accdb", "", "", "" );
			if( filePath == "" ) {
				alert("ファイルの保存参照がキャンセルされました");
				return;
			}

			var ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ".accdb;";
			
			// Microsoft Access 作成
			AdoCat.Create( ConnectionString );
			
			// 解放
			AdoCat = ""
			// 再作成
			AdoCat = newObject("ADOX.Catalog");

			var messageArray = [ filePath + ".accdb" ];
			loadTable( messageArray );

		});

	});

</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: 180px;
	background-color: #e0e0e0;
}
#extend {
	padding: 4px 16px;
	display: block;
	margin-left: auto;
	margin-right: auto;
	width: calc( 100% - 3px );
	height: calc( 100% - 180px - 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="Excel ブックを作成する(BatchHelper)">

		<input
			id="act2"
			class="ml-4 btn btn-outline-primary"
			type="button"
			value="Sleep (BatchHelper)">

	</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="Run で TIMEOUT /T 3 を実行">

		<input
			id="act4"
			class="ml-4 btn btn-outline-primary"
			type="button"
			value="Access(.accdb) の作成">

	</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 + JavaScript + COM / ( その1 ) : BatchHelper(32ビット) と テキストファイル読み込みとプリンタ一覧

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




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

2018年07月28日

HTA + JavaScript + COM / ( その2 ) : BatchHelper(32ビット) と フォルダ選択とファイル一覧とメモ帳へ貼り付けと標準出力からの読込み





大昔に作成した 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アプリケーション ) | このブログの読者になる | 更新情報をチェックする

2018年07月27日

JavaScript で WSH : Shell.Application でプリンタの一覧

コマンドプロンプトで cscript printter.js と入力して実行します。かつて、たいていにおいて VBScript で実行されてきた内容ですが、HTA で実行するにあたり、JavaScript での説明です。

HTA + JavaScript + COM / ( その1 ) : BatchHelper(32ビット) と テキストファイル読み込みとプリンタ一覧

NameSpace メソッドは、特殊なフォルダを参照する為に定数が用意されており、戻り値は Folder オブジェクトとなります。そして、Folder オブジェクトの Items メソッドでコレクション(一覧/ FolderItems オブジェクト)を取得します。

さらに、FolderItems オブジェクトの Count プロパティで一覧の数を知り、Item メソッドでエントリ( FolderItem オブジェクト )を参照します

最後に FolderItem オブジェクトの Name プロパティが名称です。

printter.js

JavaScript で実行して初めて知ったのですが、WScript と大文字小文字で書かないとエラーになります。Wscript じゃダメです...
var objShell = new ActiveXObject("Shell.Application");

var objFolder = objShell.NameSpace(0x4);
var colItems = objFolder.Items();
 
for(i = 0; i < colItems.Count; i++) {

	WScript.Echo( colItems.Item(i).Name );

}


※ WScript は、Cscript( または Wscript ) で実行した時だけ使えるオブジェクトです。





posted by at 2018-07-27 20:00 | WSH | このブログの読者になる | 更新情報をチェックする

SQL Server 2016 Service Pack 1 Express のクライアント部分のみを Windows10 にインストールしてサーバーに接続

今まで、クライアントのみをやった事がなかったので少し彷徨いました。

MicrosoftR SQL ServerR 2016 Service Pack 1 Express

一応いつものクセで最新版は避けています。



クライアント関係だけをチェック。

SQL Server Native Client は 11.0 でした。

構成マネージャで別名を作成し、サーバー名\sqlexpress で 1433。

※ 使用するツールは SQLの窓 Build C++なので 32 ビットで作成




posted by at 2018-07-27 16:57 | データーベース | このブログの読者になる | 更新情報をチェックする

Git Bash の初期スクリプト

細かく解説されているページはありますが、ちょっと時間の無駄なので

git-config.sh

作業フォルダを作成して、sample.html を作成後、git の初期化。
※ この時点でまだ sample.html は管理されていない
clear

git --version

git config --global user.name lightbox

git config --global user.email lightbox@ドメイン

git config --list

mkdir test1

cd test1

touch sample.html

git init

git status


※ touch : 空のファイルを新規作成する
※ git init : Gitの『リポジトリ』を初期化


実行結果

./git-config.sh が実行コマンドライン
lightbox@PC名 MINGW64 /c/user/git
$ ./git-config.sh
git version 2.18.0.windows.1
core.symlinks=false
core.autocrlf=false
core.fscache=true
color.diff=auto
color.status=auto
color.branch=auto
color.interactive=true
help.format=html
rebase.autosquash=true
http.sslcainfo=C:/Program Files/Git/mingw64/ssl/certs/ca-bundle.crt
http.sslbackend=openssl
diff.astextplain.textconv=astextplain
filter.lfs.clean=git-lfs clean -- %f
filter.lfs.smudge=git-lfs smudge -- %f
filter.lfs.process=git-lfs filter-process
filter.lfs.required=true
credential.helper=manager
core.editor='C:\Program Files (x86)\Notepad++\notepad++.exe' -multiInst -notabbar -nosession -noPlugin
user.name=lightbox
user.email=lightbox@ドメイン
Initialized empty Git repository in C:/user/git/test1/.git/
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)

        sample.html

nothing added to commit but untracked files present (use "git add" to track)



関連する記事

Gitの基本的な使い方

lsコマンドの使い方と覚えたい15のオプション



posted by at 2018-07-27 15:42 | フリーソフト | このブログの読者になる | 更新情報をチェックする

Git for Windows のエディタ選択にて

▼ ダウンロード
https://git-scm.com/

どうせだから、懐かしい Vim でやろうかと思ったんですが、英文訳すとこうなってました
vim is the default editor of Git for Windows only for historical reasons, and it is hightly recommanded to switch to a modern GUI editor instead

Vimエディタは強力ですが、使用するのが難しい場合があります。ユーザーインターフェイスは直感的ではなく、キーバインディングは厄介です。
vim is the default editor of Git for Windows only for historical reasons, and it is hightly recommanded to switch to a modern GUI editor instead

vimは歴史的な理由からのみGit for Windowsのデフォルトエディタですが、代わりに現代のGUIエディタに切り替えることが非常に推奨されています
でも、選択肢が 1) Nano 2) Notepad++ 3) Visual Studio Code 4) Visual Studio Code Insiders なので、いろいろ影響少ないのは Notepad++ かなぁという結論です。 ▼ 以降で出る、選択肢でデフォルト以外を使う理由
インストール後、コマンドライン版(後で役に立つSSHクライアントを含む)とスタンダードGUI版の両方を使う事ができます。

Windows利用時の注意点: この本で紹介されている複雑なコマンドを使えるので、GitはmsysGit shell(Unixスタイル)で使うようにしましょう。Windowsのシェル/コマンドラインコンソールを使わざるを得ない場合、空白を含むパラメーターを囲むための記号はダブルクオーテーション(シングルクォーテーションは使えない)を使用する必要があります。同様に、サーカムフレックス記号(^)が行末に来る場合はダブルクオーテーションで囲まなければなりません。同記号はWindowsにおいて「次行に続く」を意味する記号だからです。
posted by at 2018-07-27 14:36 | フリーソフト | このブログの読者になる | 更新情報をチェックする

2018年07月26日

HTA + JavaScript + COM / ( その1 ) : BatchHelper(32ビット) と テキストファイル読み込みとプリンタ一覧





大昔に作成した COM で、BatchHelper オブジェクト

最近 HTA + JavaScript でいろいろテストしています。
今まで VBScript で実行していたものを JavaScript で実行するテストをやっています。jQuery や BootStrap(4.1.1) を使ってできる限り汎用性を持たせようと思ってます。

HTA + Basp21 + jQuery + twitter-bootstrap(4.1.1) でメール受信ツール

HTA (HTMLアプリケーション) で JavaScript と VBScript を混在させる手法 / GetObject を VBScript 側で使用する

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

HTA(HTMLアプリケーション) のコードを html として IE11 でデバッグする方法


BatchHelper にはメソッドがたくさんあるので少しづつ、そのほか Windows の 標準 COM もたくさんあるので少しづつ動作確認でやっていきたいと思います。



sample1.hta

Windows COM には、ファイルを開くダイアログの機能が無いので、これが欲しくで作り始めた記憶があります。そして、それを使ってテキストファイルの読み込みのサンプルと、Windows Shell の情報の取得方法として、プリンタの一覧を取得しています。
<!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 );

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

	// 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 filePath = Helper.OpenFileName( "ファイルの選択", "全て,*.*,CSV,*.csv", "", "", "" );
			//	DefaultDir (省略可): 初期ディレクトリ
			//	DefaultExt (省略可): デフォルトの拡張子
			//	DefaultName (省略可): デフォルトのファイル名 
			if( filePath == "" ) {
				alert("ファイルの参照選択がキャンセルされました")
				return;
			}

			var fileArray = [ filePath ];
			loadTable( fileArray );

		});

		$("#act2").on("click", function(){

			if ( Helper == null ) {
				alert("BatchHelper はインストールされていません");
				return;
			}

			var filePath = Helper.OpenFileNames( "ファイルの選択", "全て,*.*,CSV,*.csv", "", "" );
			//	DefaultDir (省略可): 初期ディレクトリ
			//	DefaultExt (省略可): デフォルトの拡張子
			if( filePath == "" ) {
				alert("ファイルの参照選択がキャンセルされました")
				return;
			}

			var fileArray = filePath.split("\t");
			loadTable( fileArray );

		});
		
		$("#act3").on("click", function(){
			if ( Helper == null ) {
				alert("BatchHelper はインストールされていません");
				return;
			}

			var filePath = Helper.OpenFileName( "ファイルの選択", "TEXT,*.txt,CSV,*.csv", "", "", "" );
			if( filePath == "" ) {
				alert("ファイルの参照選択がキャンセルされました");
				return;
			}

			var handle = Fso.OpenTextFile( filePath, 1 );
			var textBuffer = handle.ReadAll();
			var textArray = textBuffer.split( "\r\n" );
			loadTable( textArray );

		});

		$("#act4").on("click", function(){

			var objFolder = objShell.NameSpace(0x4);
			var colItems = objFolder.Items();
			var arrData = [];
			
			for(i = 0; i < colItems.Count; i++) {
			
				arrData.push(colItems.Item(i).Name);
			}

			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: 180px;
	background-color: #e0e0e0;
}
#extend {
	padding: 4px 16px;
	display: block;
	margin-left: auto;
	margin-right: auto;
	width: calc( 100% - 3px );
	height: calc( 100% - 180px - 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="ファイルを開く/複数(BatchHelper)">

	</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="SHIFT_JISファイルを読み込む">

		<input
			id="act4"
			class="ml-4 btn btn-outline-primary"
			type="button"
			value="プリンタの一覧">

	</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 at 2018-07-26 23:32 | HTA ( HTMLアプリケーション ) | このブログの読者になる | 更新情報をチェックする

2018年07月13日

HTA(HTMLアプリケーション) のコードを html として IE11 でデバッグする方法

信頼するサイトに http://localhost を登録して、レベルのカスタマイズで『スクリプトを実行しても安全だとマークされていないActiveX コントロールの初期化とスクリプトの実行』を『有効』にします







『安全だとマークされていないActiveX コントロール』を『有効』



こうする事によって、HTA で普通に使用できる、COM のクラスが HTML + IE11 で実行可能になります。この状態であれば、開発者ツール(F12) も使えるので HTML・CSS・JavaScript のリアルタイムチェックを詳細に行えます。


そして、動作確認した後に .html を .hta に変更してテストします。


関連する記事

HTA + Basp21 + jQuery + twitter-bootstrap(4.1.1) でメール受信ツール

テストにはまだまだ使える(重宝する) AN HTTP Server の正しい使用方法





posted by at 2018-07-13 17:11 | 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 %>
この記述は、以下の場所で使用します


Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門