SQLの窓

2014年03月11日


VBScript : WEB上のHTMLを使用して、InternetExplorer.Application でパスワード入力を実装する

昔はセキュリティがゆるかったので、ローカルの C:\ のパスで使えたのですが、今は http:// でないと使え無いので画面を http://winofsql.jp/password.htm として置いています。



入力後、きちんと IE は閉じます。

また、IE11 環境で実行しているので、VBScript を利用可能にする為、以下の記述は必要です。
<meta http-equiv="X-UA-Compatible" content="IE=8">
<html>
<head>
<meta http-equiv="X-UA-Compatible" content="IE=8">
<SCRIPT LANGUAGE="VBScript">
 
Sub RunScript 
	document.getElementById("OKClicked").Value = "OK"
End Sub 

Sub CancelScript 
	document.getElementById("OKClicked").Value = "Cancelled"
End Sub 

</SCRIPT> 

<BODY> 
<pre>
Password:
<input type="password" id="UserPassword" size="40">
<input type="hidden" id="OKClicked" size="20"> 
<input class="button" type="button" value=" OK " onClick="RunScript"
> <input class="button" type="button" value="Cancel" onClick="CancelScript">
</pre>
</body>
</html>
※ ローカルでは無いので必ず、Busy 対処は必要です。
※ Sleep を使用して、入力されたかどうかを監視して待機しています。
' 管理者として実行を強制する
Set obj = Wscript.CreateObject("Shell.Application")
if Wscript.Arguments.Count = 0 then
	obj.ShellExecute "wscript.exe", WScript.ScriptFullName & " runas", "", "runas", 1
	Wscript.Quit
end if

' オブジェクト作成
Set objExplorer = WScript.CreateObject("InternetExplorer.Application") 
 
' オブジェクト設定
objExplorer.Navigate "http://winofsql.jp/password.htm"	
objExplorer.ToolBar = 0 
objExplorer.StatusBar = 0 
objExplorer.Width = 400 
objExplorer.Height = 350  
objExplorer.Left = 300 
objExplorer.Top = 200 
objExplorer.Visible = True

' ページのロードを待つ
Do While objExplorer.Busy
	' 100 ミリ秒
	Wscript.Sleep 100
Loop
 
' 入力状態を監視
Do While (objExplorer.document.getElementById("OKClicked").Value = "") 
	Wscript.Sleep 250
Loop  

' パスワード取得
strPassword = objExplorer.document.getElementById("UserPassword").Value
' ボタンの判定用
strButton = objExplorer.document.getElementById("OKClicked").Value

' オブジェクト終了
objExplorer.Quit
' 少し待機
Wscript.Sleep 250 

' 入力判定
If strButton = "Cancelled" Then 
	Wscript.Quit 
Else 
	Wscript.Echo strPassword 
End If

Wscript.Echo strPassword


関連する記事

IE11 で VBScript を使う場合の注意事項 ( 古い社内アプリ移行時必見 )



posted by lightbox at 2014-03-11 20:27 | VBScript | このブログの読者になる | 更新情報をチェックする

2014年03月09日


VBScript : OSのバージョンを取得



関数になっていますので、他から利用可能です

バージョン数値(小数以下がある場合もある) = GetOSVersion()
Wscript.Echo GetOSVersion()

' **********************************************************
' Windows 2000 : 5
' Windows XP   : 5.1
' Windows 7    : 6.1
' Windows 8    : 6.2
' Windows 8.1  : 6.3
' **********************************************************
Function GetOSVersion()

	Dim obj,colTarget,objRow,str,aData,nData,I

	Set obj = GetObject("winmgmts:\\.\root\cimv2")
	Set colTarget = obj.ExecQuery( "select * from Win32_OperatingSystem" )
	For Each objRow in colTarget
		str = objRow.Version
	Next

	aData = Split( str, "." )
	For I = 0 to Ubound( aData )
		if I > 1 then
			Exit For
		end if
		if I > 0 then
			nTarget = nTarget & "."
		end if
		nTarget = nTarget & aData(I)
	Next

	GetOSVersion = CDbl( nTarget )

End Function

関連する記事

WSH : 指定したキーでレジストリエディタを開く

レジストリエディタの直前に開いたレジストリの場所の保存名が、Windows バージョンによって変化しています。


タグ:VBScript 関数 WMI
posted by lightbox at 2014-03-09 00:28 | VBS + WMI | このブログの読者になる | 更新情報をチェックする

2014年03月06日


JavaScript : ブラウザの表示を半透明で暗くする方法( scrollHeight で高さ決定 )





上に DIV を重ねるのでそのままではなにもできなくなりますので、さらに手前にコントローラーを作成するのが通常ですが( Lightbox ) 元に戻すには、追加した div を削除する必要があります。

IE に関しては、IE11 の 開発者ツールで各バージョンで確認しました。
var ds = document.createElement('div');
ds.setAttribute('id','ds')
ds.style.position='absolute';
ds.style.width=Math.max(document.documentElement.scrollWidth,document.body.scrollWidth)*2+'px';
ds.style.height=Math.max(document.documentElement.scrollHeight,document.body.scrollHeight)*2+'px';
ds.style.left='0px';
ds.style.top='0px';
var userAgent = window.navigator.userAgent.toLowerCase();
if (userAgent.indexOf("msie") > -1) {
	ds.style.display = 'none';
	var appVersion = window.navigator.appVersion.toLowerCase();
	if (appVersion.indexOf("msie 10.0") > -1) {
		ds.style.backgroundColor = '#000000';
		ds.style.opacity=.5;
	}
	else {
		ds.style.backgroundColor = '#000000';
		ds.style.filter='alpha(opacity=50)';
	}
}
else {
	ds.style.backgroundColor = '#000000';
	ds.style.opacity=.5;
}
document.body.appendChild(ds);
if (userAgent.indexOf("msie") > -1) {
	ds.style.display = '';
}



タグ:javascript
posted by lightbox at 2014-03-06 22:44 | JavaScript DOM | このブログの読者になる | 更新情報をチェックする

JavaScript による2会話アプリケーションのコントロール(2)

▼ pass1 開始 ボタンと pass2 開始 ボタンをクリックして下さい。


 
------------------------------






class 属性を使用して、会話グループ単位に使用可能にしたり使用不能にしたりします

<script type="text/javascript">
function passControl(idstr,pass,enable) {
	var x = window[idstr];
	for( var i = 0; i < x.length; i++ ) {
		if ( x[i].className == pass ) {
			if ( (x[i].tagName).toUpperCase() == 'INPUT' ) {
				if ( (x[i].type).toUpperCase() == 'TEXT' ) {
					if ( enable ) {
						x[i].readOnly = false;
						x[i].style.backgroundColor = "#DCF2F5";
					}
					else {
						x[i].readOnly = true;
						x[i].style.backgroundColor = "#ccc";
					}
				}
				if ( (x[i].type).toUpperCase() == 'BUTTON' ) {
					if ( enable ) {
						x[i].disabled = false;
					}
					else {
						x[i].disabled = true;
					}
				}
			}
			if ( (x[i].tagName).toUpperCase() == 'TEXTAREA' ) {
				if ( enable ) {
					x[i].readOnly = false;
					x[i].style.backgroundColor = "#DCF2F5";
				}
				else {
					x[i].readOnly = true;
					x[i].style.backgroundColor = "#ccc";
				}
			}
			if ( (x[i].tagName).toUpperCase() == 'SELECT' ) {
				if ( enable ) {
					x[i].disabled = false;
				}
				else {
					x[i].disabled = true;
				}
			}
		}
	}
}
function getFormEntry(idstr) {

	// 親要素
	var js_form = document.getElementById(idstr);

	// 配列
	var arr = new Array();

	// input
	var wk = js_form.getElementsByTagName("input");
	for( i = 0; i < wk.length; i++ ) {
		arr.push( wk[i] );
	}

	// textarea
	var wk = js_form.getElementsByTagName("textarea");
	for( i = 0; i < wk.length; i++ ) {
		arr.push( wk[i] );
	}

	// select
	var wk = js_form.getElementsByTagName("select");
	for( i = 0; i < wk.length; i++ ) {
		arr.push( wk[i] );
	}

	window[idstr] = arr;
	console.dir( window[idstr] );

}
</script>
<style type="text/css">
#js_form2 {
	width: 400px;
	padding: 20px;
	border: 1px solid #888;
	border-radius: 10px;
}
</style>
<input type="button" value="pass1 開始" onclick='passControl("js_form2","pass1",true);passControl("js_form2","pass2",false)'>
<input type="button" value="pass2 開始" onclick='passControl("js_form2","pass1",false);passControl("js_form2","pass2",true)'>
<br><br>
<pre id="js_form2">
<input type="text" id="in01" class="pass1"> <input type="button" id="bt01" value="第1会話ボタン" class="pass1">
------------------------------
<input type="text" id="in02" class="pass2">
<input type="text" id="in03" class="pass2">
<textarea id="tx01" class="pass2"></textarea>
<select id="cb01" class="pass2">
<option value="001">001</option>
<option value="002">002</option>
</select>

<input type="button" id="bt02" value="第2会話ボタン" class="pass2">
</pre>
<script type="text/javascript">
getFormEntry("js_form2");
</script>
関連する記事

JavaScript による2会話アプリケーションのコントロール(1)


posted by lightbox at 2014-03-06 21:25 | JavaScript | このブログの読者になる | 更新情報をチェックする

JavaScript による2会話アプリケーションのコントロール(1)

以下のような画面から、まず対象となるコントロールとして、INPUT、TEXTAREA、SELECT の一覧を配列として取得します
 
------------------------------






getFormEntry("js_form"); で取得した配列は、window.js_form として参照可能です。( つまり、js_form というグローバルスコープの変数になります )
<script type="text/javascript">
function getFormEntry(idstr) {

	// 親要素
	var js_form = document.getElementById(idstr);

	// 配列
	var arr = new Array();

	// input
	var wk = js_form.getElementsByTagName("input");
	for( i = 0; i < wk.length; i++ ) {
		arr.push( wk[i] );
	}

	// textarea
	wk = js_form.getElementsByTagName("textarea");
	for( i = 0; i < wk.length; i++ ) {
		arr.push( wk[i] );
	}

	// select
	wk = js_form.getElementsByTagName("select");
	for( i = 0; i < wk.length; i++ ) {
		arr.push( wk[i] );
	}

	window[idstr] = arr;
	console.dir( window[idstr] );

}
</script>
<style type="text/css">
#js_form {
	width: 400px;
	padding: 20px;
	border: 1px solid #888;
	border-radius: 10px;
}
</style>
<pre id="js_form">
<input type="text" id="in01" class="pass1"> <input type="button" id="bt01" value="第1会話ボタン" class="pass1">
------------------------------
<input type="text" id="in02" class="pass2">
<input type="text" id="in03" class="pass2">
<textarea id="tx01" class="pass2"></textarea>
<select id="cb01" class="pass2">
<option value="001">001</option>
<option value="002">002</option>
</select>

<input type="button" id="bt02" value="第2会話ボタン" class="pass2">
</pre>
<script type="text/javascript">
getFormEntry("js_form");
</script>

関連する記事

JavaScript による2会話アプリケーションのコントロール(2)


posted by lightbox at 2014-03-06 21:24 | JavaScript | このブログの読者になる | 更新情報をチェックする

アドレスバーに表示した URL を、ダウンロードできるリンクを作成するブックマークレット( 動画等、そのままではダウンロードできない場合にとても有効です )



リンクビルダー

▼ 表示しているページに以下のような IFRAME を埋め込みます


実行すると、現在表示している URL を使って、まずダウンロード用の単純なリンクを作成します( このリンクは右クリックから使うように、通常のクリックではメッセージが表示されて、使用できません )

それ以外に、HTML として以下のようなリンクを作成します。
1) 普通のリンク 
2) 新しくウインドウを開くリンク
3) 画像として
4) IFRAME の内容
5) javascript として
6) css として
一度開いた後も、他の URL を上にテキストエリアに貼り付けて再度作成もできます。 ブックマークレット内では、こちらでホスティングしている js ファイルを使用しており、その内容は以下のようになります
str="";
str+="<meta charset=\"utf-8\"> \n";
str+="<style> \n";
str+="* { \n";
str+="	font-size:14px; \n";
str+="	font-family: Arial, Helvetica, Verdana, \"ヒラギノ角ゴPro W3\", \"Hiragino Kaku Gothic Pro\", Osaka, \"メイリオ\", Meiryo, \"MS Pゴシック\", sans-serif; \n";
str+="} \n";
str+="body{ \n";
str+="	background-color:#ccc; \n";
str+="	padding-left: 11px; \n";
str+="} \n";
str+="</style> \n";
str+="<input type=\"button\" value=\"ダウンロードリンク作成\" onclick=\"build_link();\"> \n";
str+=" <input type=\"button\" value=\"アドレスバー取得\" onclick=\"get_link();\"> \n";
str+="<br> \n";
str+="<textarea id=\"url\" style='width:360px;height:70px;' onclick='this.select();'></textarea> \n";
str+="<div style='height:40px;padding:3px;'> \n";
str+="<a id=\"link\" href=\"#\" onclick=\"";
str+="		alert('右クリックからダウンロードして下さい'); \n";
str+="		if (window.navigator.appName.toLowerCase().indexOf('microsoft') > -1) { \n";
str+="			event.returnValue = false; \n";
str+="		} \n";
str+="		event.preventDefault(); \n";
str+="		event.stopPropagation(); \n";
str+="	\"> </a> </div>\n";
str+="<textarea id=\"data\" style='width:360px;height:410px;'></textarea> \n";
str+="<br><a href=\"http://toolbox.winofsql.jp/tool_html_links.htm\" target=\"_blank\" style='color:navy'>HTMLまたはJSのテストページ</a> \n";
str+="<"+"script type=\"text/javascript\"> \n";
str+="get_link(); \n";
str+="build_link(); \n";
str+="</"+"script> ";
document.write(str);
document.close();
function get_link() {
	document.getElementById("url").value = parent.document.URL;
}
function build_link() {
	if ( document.getElementById("url").value == "" ) {
		alert("URL を入力して下さい");
		document.getElementById("url").focus();
		return;
	}

	var url = document.getElementById("url").value;

	document.getElementById("link").firstChild.nodeValue = "ダウンロードリンク";
	document.getElementById("link").href= url;

	var target = "";

	target+="<a href=\""+ url + "\">リンク</a>\n";
	target+="\n";
	target+="<a href=\""+ url + "\" target=\"_blank\">新しいウインドウリンク</a>\n";
	target+="\n";
	target+="<img src=\""+ url + "\" style=\"border: solid 0px #000000;\">\n";
	target+="\n";
	target+="<iframe src=\"" + url + "\" name=\"myframe\" frameborder=\"1\" scrolling=\"yes\" width=\"600\" height=\"400\"></iframe>\n";
	target+="\n";
	target+="<"+"script type=\"text/javascript\" src=\""+ url + "\"></"+"script> \n";
	target+="\n";
	target+="<link rel=\"stylesheet\" href=\""+ url + "\" type=\"text/css\"> ";
	target+="\n";

	document.getElementById("data").value = target;
}

このコードを、IFRAME 内にダイレクトに書き込んで、画面と処理を作成しています。JavaScript で画面を作成する場合、document.write しか選択肢は無く(DOMで作成するとブラウザの違いを考慮する必要があり、細かい調整も複雑になります)、そのような文字列を手作業で作成するのは大変なので、こちらのツールを使用しています。

▼ HTML や JavaScript のコードを文字列に変換します



posted by lightbox at 2014-03-06 12:57 | ブックマークレット | このブログの読者になる | 更新情報をチェックする
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 終わり