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

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

2018年06月24日

Excel シートから Basp21 を使用してメールの送受信をして、今後の何かに役立てる

Basp21 は Down Load! BASP21-2003-0211.exe (1.44MB) がおすすめです。

※ ボタンは ActiveX でないとダメです



これだけではただのお遊びですが、メールというのはとても応用手段の多いものです。とりあえず Basp21 が古すぎて、Gmail はアウトだと思います。テストはさくらインターネットのメールで行っています。

でも、ローカルとか社内なら十分に使えます。

※ 受信は Subject、From、Dateヘッダーの内容のみを返します
Const SMTP As String = "xxxxxxxx.sakura.ne.jp:587"
Const POP As String = "xxxxxxxx.sakura.ne.jp"
Const RCVDIR As String = ">C:\temp\rcvmail"
Dim Basp21 As Object

Private Sub ボタン_Click()


    MsgBox ("OK")
    
    Set Basp21 = CreateObject("Basp21")
    
    Dim ErrMessage As Variant
    ErrMessage = Basp21.SendMail( _
        SMTP, _
        Worksheets("Sheet1").Cells(3, 5).Value, _
        Worksheets("Sheet1").Cells(3, 8).Value & vbTab & Worksheets("Sheet1").Cells(4, 8).Value & ":" & Worksheets("Sheet1").Cells(5, 8).Value, _
        Worksheets("Sheet1").Cells(1, 5).Value, _
        Worksheets("Sheet1").Cells(2, 5).Value, _
        "" _
    )
    
    If ErrMessage <> "" Then
        MsgBox (ErrMessage)
    Else
        MsgBox ("メール送信が終了しました。")
    End If

    
    Dim output As Variant
    Dim I As Integer
    
    output = Basp21.RcvMail(POP, _
                Worksheets("Sheet1").Cells(4, 8).Value, _
                Worksheets("Sheet1").Cells(5, 8).Value, _
                "LIST", _
                RCVDIR)
                
    If IsArray(output) Then
    
        For I = 0 To UBound(output)
        
            Worksheets("Sheet1").Cells(I + 6, 4).Value = output(I)
    
        Next
        
    Else
    
        MsgBox (output)
        
    End If

    Set Basp21 = Nothing

End Sub

メールアドレスをリンクしないようにするのは、オプションの文書校正 => オートコレクトのオプション => 入力オートフォーマットの先頭のチェックボックスをオフ


パスワードの編集は、ユーザ定義で **;**;**;** 
( こんなのあるんですね )




posted by at 2018-06-24 21:05 | Comment(0) | VBScript | このブログの読者になる | 更新情報をチェックする

2018年06月08日

DAZStudio で創った『ブロンドエルフ戦士』( 肌露出が多かったのでイラストACから一枚を残して消えた )

この記事はもともと三年前のもので、当時まだ世の中が平和だった事を思い出します。なんか、今のイラストAC は前向きなのはいいけれど、そんなバグ持ちサイトでよくやるよなぁ・・・といろいろ心配する種は尽きないのですが、それなりにダウンロードされると嬉しかったりはするのです。

数少ないので小遣いにもなりませんが。


ダウンロードページ

ブロンドエルフ戦士全身

ブロンドエルフ戦士全身 リアルウェット

ブロンドエルフ戦士全身 オイルウェット

なんか、オイルウェットが評判よかったみたいです。

ブロンドエルフ戦士 オイルウェットボディ


これ V4 でして...

3年もたったので、ちょっと頑張って素直な ELF にしてみました。









posted by at 2018-06-08 22:29 | Comment(0) | イラストAC | このブログの読者になる | 更新情報をチェックする

DAZ3D : 真夏のアスリート



元々はイラストAC に投稿したデータですが、後に一時だけ GACA というサイトがあった時に投稿したやつです。
DAZ3D の NVIDIA Iray でレンダリングしたものです。イラストAC では、影なしで背景透過でしたが、影を使うとシーンのライトの影が明瞭に2つ出て来たので、後付けで背景を砂浜で作成して重ねています。
上の画像や文章は過去の投稿で、GACA もそうですがイラストAC でも肌露出の多いものが表示されなくなったりで対応がてら記事をリライトしています。 で、再度リビルドしてみます。 3年も経つと、できあがるものも変わってきました。シェーダも増えたし、簡単な背景用の環境マップもいくつかありますし、Iray そのものに慣れたせいもあります。というか、グラボを3年前は持ってなかったので練度もだいぶ違います。 ただ、この絵に関してはレンダリング時間が短かったので拡大すると粗い粒子が目立ちます。
タグ:DAZ3D iray
posted by at 2018-06-08 20:30 | Comment(0) | イラストAC | このブログの読者になる | 更新情報をチェックする

2018年05月19日

楽天 HTML メールに使用されている tc.api.rakuten-card.co.jp というドメインについて。


結論から言うと、HTML メールのどこをクリックしたか記録している楽天内の WEB API だと思います。

そもそも、正式な rakuten-card.co.jp のサブドメインなので、フィッシングであるはずは無いのですが、HTML メールの表記と実際のリンクが違うので単純に『フィッシング』と思われても無理は無いというか、楽天の HTML メールの内容が怪しすぎるという現実もあります。

▼ WHOIS検索


tc.api.rakuten-card.co.jp という文字列を機械的にサブドメインを取り去ってメインのドメインで検索しています。偽装文字のたぐいは無いという事です。

よくある単純なドメイン偽装は、最後の .jp の後ろに付いています。つまり、rakuten-card.co.jp をサブドメインとして登録して騙そうというのがありますがら、URL がおかしいと感じる感性はとても重要です。( なので、tc.api.rakuten-card.co.jp がフィッシングだと疑うのは正しい感性です )

では、多少技術的なチェックの手順

1) WEB メールより そのままの URL を取得する

WEB メールを Google Chrome で開いて( ここでは nifty です )、F12 キーでデベロッパーツールを起動し、左端のアイコン(インスペクター/検査)で、該当 URL の周辺をクリックします。

※ 直接リンクをクリックするのは、失敗したら困るからです。



そうすると、デベロッパーツール内で該当部分が選択されるので、F2 キーを押して編集モードに移行します。



そして、HTML 部分をコピーします。



2) この URL が何をしているかを調べる

Google Chrom で新しいタブを開き、F12 で開発者ツールを起動して『ネットワークタブ』を選択します。

それから、アドレスバーに該当 URL を貼り付けてページを表示します。結果は 楽天の正しいページですが、そこに至った経緯を調べる為には、ネットワークタブの一番上までスクロールして『?4_--_1526575_--_421003_--_11』のところをクリックします( header タブが表示されます)。

この内容が、この URL が次に実行した内容が間接的に見れる場所です。

▼ General : ブラウザが URL を呼び出すのに使った情報とその URL から返って来た単純な情報
Request URL: https://tc.api.rakuten-card.co.jp/?4_--_1526575_--_421003_--_11
Request Method: GET
Status Code: 302 Found
Remote Address: 203.191.234.109:443
Referrer Policy: no-referrer-when-downgrade

▼ Response Headers : サーバーから戻された詳細な情報
HTTP/1.1 302 Found
Date: Sat, 19 May 2018 03:35:29 GMT
Server: Apache
Location: https://www.rakuten-card.co.jp/?scid=mi_rkc_oo_htmlml_kctop71798
Content-Length: 248
Keep-Alive: timeout=15, max=100
Connection: Keep-Alive
Content-Type: text/html; charset=iso-8859-1

ここまでで、解るのが以下の内容です。

1) ブラウザは tc.api.rakuten-card.co.jp/?4_--_1526575_--_421003_--_11 を呼んだ
2) ブラウザに https://www.rakuten-card.co.jp/?scid=mi_rkc_oo_htmlml_kctop71798 が返って来た
3) ブラウザは https://www.rakuten-card.co.jp/?scid=mi_rkc_oo_htmlml_kctop71798 を呼び出した
4) ブラウザは https://www.rakuten-card.co.jp/?scid=mi_rkc_oo_htmlml_kctop71798 を表示した

です。


で、実際 tc.api.rakuten-card.co.jp/?4_--_1526575_--_421003_--_11 の内部で何が行われているかは不明ですが、ブラウザには次に表示して欲しい URL しか返していません。( 上の情報のみで、HTML 部分は返していないので / そもそも Location: はそういう目的で使用します )

そしてなんでこんな回りくどい事をするかと言うと、一般的に『どのメールのどの場所がクリックされたかを記録している』と推測できる、という結論になるわけです。


ちなみに

アンカー( リンク内 ) にある、onclick="return redirectConf(this)" は、nifty の WEB メールが付加してるもののようです。

例えば、onclick="return false" とするとそのリンクは href で指定した URL へは飛ばなくなる( キャンセルされます )ので、nifty 内部でなんらかのセキュリティ機能を発動できるのだと推測されます。




posted by at 2018-05-19 13:22 | Comment(0) | インターネット | このブログの読者になる | 更新情報をチェックする


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