SQLの窓

2018年02月10日


VBScript : InternetExplorer.Application で、ファイルを開くダイアログを開く

昔から一般的に使われて来た方法ですが、ある時から about:blank では、fakepath というパスで返るようになって使えなくなっていました。そこで、ローカルにファイルを作ってそれで対処しています。但し、管理者権限で実行する必要があるので冒頭の処理が必要です。

ファイルの種類は設定できません。どうしても VBScript でファイルを開く為のダイアログを正しく使いたい場合は、COM を作成して呼び出す必要があります( exe に実行させて、ファイルで引き渡すと言う手もあります )。しかし、本来 VBScript で行う処理は簡易的なものなのでそこまでこだわる必要も無いのでこれで十分使えると思います。

冒頭の objShell.MinimizeAll は実行しておかないと、エクスプローラから実行した場合その下にファイルを開くダイアログが隠れてしまいます。

このソースは拡張子が .wsf 用です。
<JOB>
<SCRIPT language="VBScript">
' ************************************************
' 管理者として実行を強制する
' ************************************************
Set objShell = Wscript.CreateObject("Shell.Application")
if Wscript.Arguments.Count = 0 then
	objShell.ShellExecute "wscript.exe", WScript.ScriptFullName & " runas", "", "runas", 1
	Wscript.Quit
end if

' ************************************************
' ファイルを開くダイアログの為に他を全て最小化する
' ************************************************
objShell.MinimizeAll

' ************************************************
' ファイル選択
' ************************************************
strValue = OpenLocalFileName
if strValue = "" then
	Wscript.Quit
end if

MsgBox( strValue )

' ************************************************
' InternetExplorer.Application でファイル選択
' ************************************************
Function OpenLocalFileName( )

	' ファイルシステムを操作するオブジェクト
	Set Fso = WScript.CreateObject( "Scripting.FileSystemObject" )
	' テンポラリフォルダ
	TempDir =  Fso.GetSpecialFolder(2)
	on error resume next
	' テンポラリフォルダに空の "local.htm" を作成
	Set objHandle = Fso.CreateTextFile( TempDir & "\local.htm", True, True )
	if Err.Number <> 0 then
		Exit Function
	end if
	objHandle.Close
	on error goto 0

	Set IEDocument = Wscript.CreateObject("InternetExplorer.Application")
	IEDocument.Navigate( TempDir & "\local.htm" )
	Do While IEDocument.Busy
		' 100 ミリ秒
		Wscript.Sleep 100
	Loop
	IEDocument.document.getElementsByTagName("BODY")(0).innerHTML = "<input id='FilePath' type='file'>"
	call IEDocument.document.getElementById("FilePath").click()
	if IEDocument.document.getElementById("FilePath").value = "" then
		OpenLocalFileName = ""
		IEDocument.Quit
		Set IEDocument = Nothing
		Exit Function
	end if

	OpenLocalFileName = IEDocument.document.getElementById("FilePath").value

	IEDocument.Quit
	Set IEDocument = Nothing

End Function
</SCRIPT>
</JOB>




【VBScript ベーシックの最新記事】
posted by lightbox at 2018-02-10 20:45 | VBScript ベーシック | このブログの読者になる | 更新情報をチェックする

PHP をコマンドプロンプトから実行して、WEB 上のデータを取得するいくつかの方法

もちろん、PHPのコードを書いて実行してしまえばいいのですが、単純にダウンロードしたり、データの先頭の一部分だけを取り出したい場合、コピー & ペーストで比較的簡単に行えるので、バッチ処理の一部として応用できるかもしれません。

php.ini に allow_url_fopen = On が設定されている事を確認して下さい
php -r "print ini_get('allow_url_fopen');"

コマンドプロンプトの設定

まずは簡易編集モードである事を確認し、右クリックでコマンドプロンプトにペーストできるようにします。(PowerShell も基本的には同じで、cmd と入力すればコマンドプロンプトになります。)



PHP 処理専用のコマンドウインドウ作成

以下のバッチファイルを作成して、エクスプローラからダブルクリックで実行します。
@echo off
setlocal
REM ▼ PHP のあるパスの追加
path=%path%;c:\php
title PHP 実行用
prompt work$G
mode con:cols=85 lines=50

cmd /k

title 終了しました : PHP 実行用
endlocal


REM php -r "copy('http://winofsql.jp/info.php','info.htm');"
REM php -r "print file_get_contents('http://winofsql.jp/info.php');"
REM php -r "print file_get_contents('http://winofsql.jp/info.php');" > info.html
REM php -r "file_put_contents('info.txt',file_get_contents('http://winofsql.jp/info.php'));"




実行コマンドは、サンプルバッチファイル内にコメントにして書いてありますが、それぞれは以下のような機能になります。

ダウンロード
php -r "copy('http://winofsql.jp/info.php','info.htm');"

表示
php -r "print file_get_contents('http://winofsql.jp/info.php');"

これは、リダイレクトするとダウンロードと同じ事になります

ダウンロード
php -r "file_put_contents('info.txt',file_get_contents('http://winofsql.jp/info.php'));"

ただの、ダウンロードならは copy で十分ですが、データが json なんかの場合はこのように関数を組み合わせるといいと思います。(json_encode から print_r で file_put_contents)

また、fopen fread fwrite で、データの一部分をダウンロードできます。
php -r "$i=fopen('http://winofsql.jp/info.php','r');$o=fopen('info.4096',"w");$r=fread($i,4096);fwrite($o,$r);"


posted by lightbox at 2018-02-10 00:34 | Comment(0) | PHP + 通信 | このブログの読者になる | 更新情報をチェックする

2018年02月08日


jQuery の ajax でアクセス可能なデータをボタンをクリックした後 window.open で開いたウインドウの中にテキストエリアを作成して表示する方法

デモページ

利用目的

ウェブアプリで、デバッグデータをファイルに書き込んで残しているような場合、すくに内容を確認できるように作成しました。なので、dataType に text を使用していますが、一般的な json や QueryString の作成は 『jQuery + bootstrap.js で ajax の GET と POST を使用した DB テーブルを更新する UI テンプレート』を参照して下さい。

位置、サイズ指定の window.open

window.open の処理は、他でも転用できるように関数化しています。元々は SyntaxHighlighter 2.0.296 で使用されていたものを転用しています。特別な内容はありませんが、文字列の引数を作成する場合に常に前にカンマを置いておいて、最終的に出来上がった文字列の先頭のカンマを正規表現で取り除いていたのが印象的でした。

やはり、IE11 が障害でした

document.write を使用しているのは、IE11 がそれでしか動作しなかったからです。Chrome や Firefox ですと、Owner ウインドウ側の jQuery で、新しいウインドウ内の動的処理やイベントを定義できました(その場合でも、新しい window 内に jQuery を組み込む事はできます)。しかし、IE11 では動作しなかったのでこのような実装になっています。

ただ、メンテナンス性や作りやすさで言えば、document.write が勝ります。唯一、文字列のコードを作るのがやっかいですが、自作のテキスト変換サービス を使用しているので特に困った事はありません。
(プログラム用文字列作成 の JavaScript ボタン)

Access-Control-Allow-Origin: *

通常、別ドメインのデータを ajax で取得できないので、自サイトに Access-Control-Allow-Origin: * を返すデータを用意して使用しています。同じドメインで完結するアプリでしたら、特に気にする必要はありません

ポップアップブロック対策

$.get のイベントの中で window.open をしてしまうと、ポップアップブロックにひっかかるので、先に window.open をして window を開いておいてから、$.get のイベント内で動的にコンテンツを書き込んでいます。

補足

css 設定に関しては、見栄えを優先するのであれば、style 記述そのものを document.write すべきです。ですが、ここではあくまでデバッグが目的なので、メンテナンス性に基づいて、一か所に集約しています。

css に calc を指定しているのは、テキストエリアがウインドウのサイズ変更と同期するためです。但し、複雑な階層を持つ HTML 構造の場合は、height の指定は注意が必要です( html や body や 親要素が height:100% である必要があったような... )

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script>

$(function(){

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

		var win = win_open("","_blank",750, 400, "location=0,resizable=1,menubar=0,scrollbars=1");

		$.get({
			url: "https://lightbox.sakura.ne.jp/toolbox/data/syain.json",
			cache: false,
			dataType : "text"
		})
		.done( function( result, textStatus, jqXHR ) {
			console.dir( jqXHR );
			console.log( textStatus );	// success
			console.log( jqXHR.status );	// 通常 200
			console.log( jqXHR.statusText );	// OK
		
			var headers = jqXHR.getAllResponseHeaders();
			console.dir( headers );
		
			// 成功した結果 : jqXHR.responseText
			console.log( result );

var str="";
str+="<"+"script src=\"https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js\"></"+"script> \n";
			win.document.write(str);

str="";
str+="<t"+ "extarea readonly style=\"width:100%;height:350px\">" + result + "</" + "textarea>\n";
str+="<"+"script> \n";
str+="$(function() { \n";
str+="	$(\"textarea\").css({\"width\":\"calc(100% - 10px)\", \"padding\":\"10px\"}); \n";
str+="	$(\"textarea\").css({\"height\":\"calc(100% - 20px)\"}); \n";
str+="	$(\"textarea\").css({\"font-size\":\"14px\"}); \n";
str+=" $(\"textarea\").css({\"font-family\": '\"ヒラギノ角ゴPro W3\",\"Hiragino Kaku Gothic Pro\",\"メイリオ\",Meiryo,\"MS Pゴシック\",Verdana,Arial,Helvetica,sans-serif'}); \n";
str+="	$(\"head\").append($(\"<title>\").text(\"前回の入力値\")); \n";
str+="	$(\"textarea\").focus(); \n";
str+="}); \n";
str+="</"+"script> ";

			win.document.write(str);
			win.document.close();
		
		})
		.fail(function( jqXHR, textStatus ) {
			console.dir( jqXHR );
			console.log( textStatus );	// error
			
		});

	});

});

function win_open(url, name, width, height, options)	{
	var x = (screen.width - width) / 2;
	var y = (screen.height - height) / 2;
	options +=
		', left=' + x + 
		', top=' + y +
		', width=' + width +
		', height=' + height
	;
	// 先頭のカンマを取り除く
	options = options.replace(/^,/, '');

	var win = window.open(url, name, options);
	win.focus();
	return win;
}
</script>
<input id="debug1" class="debug" type="button" value="Access-Control-Allow-Origin: * データの表示">





タグ:jquery javascript
posted by lightbox at 2018-02-08 15:46 | Comment(0) | JavaScript コンテンツ | このブログの読者になる | 更新情報をチェックする

jQuery + bootstrap.js で ajax の GET と POST を使用した DB テーブルを更新する UI テンプレート

実際のアプリケーションの UI 部分のみ取り出して、ブラウザでテストできるように構成しました。特に jQuery の ajax を用いたテンプレートとして流用できると思います。

初回の キー入力部分では、$.get で GET 読み込みを行っています。第二パスである更新時は $.ajax で POST を使用して送信しています。( POST では FormData オブジェクトを使用しています )

更新確認には、bootstrap のダイアログを使用して、一つのフォームで二つのデータ送信がコードとして別々に読めるようになっています。

実際の FORM の中に入力フィールドを配置して、HTML のチェック機能を利用できるようにしています。ブラウザの送信は、preventDefault() でキャンセルして、ajax でデータを送信するスタイルとなっています。

※ submit_type == "pass1" は、第一パス(キーの送信)です
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/tether/1.4.0/js/tether.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/css/bootstrap.css">
<script src="https://cdnjs.cloudflare.com/ajax/libs/twitter-bootstrap/4.0.0-alpha.6/js/bootstrap.js"></script>
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/2.1.3/toastr.min.css">
<script type="text/javascript" src="https://cdnjs.cloudflare.com/ajax/libs/toastr.js/2.1.3/toastr.min.js"></script>

<script>
// ▼ このコードのみでのテスト用変数
var submit_type = "pass1";
//var submit_type = "pass2";

$(function(){

	if ( submit_type == "pass1" ) {
		$("[name^='fld_'],#ref_btn").prop('disabled', true);
	}
	if ( submit_type == "pass2" ) {
		$("input[name='key_code']").prop('readonly', true);
		$("[name^='fld_'],#ref_btn").prop('disabled', false);
	}

	// **************************************
	// 確認処理
	// **************************************
	$("#base").on( "submit", function(event){

		// 更新確認ダイアログの表示の為、本来の送信処理はキャンセル
		event.preventDefault();

		// 入力したコードよりデータを取得する
		if ( submit_type == "pass1" ) {

			console.log("key_code");
			console.log(key_code);

			// Ajax で GET する
			$.get({
				url: "app-get.php",
				cache: false,
				data: { "key_code" : $(this).find("input[name='key_code']" ).val() }
			})
			.done(function( data, textStatus ){
				console.log( "status:" + textStatus );
				console.log( "data:" + JSON.stringify(data, null, "    ") );

				if ( data.status == 0 ) {

					// *************************************
					// コード部分を入力不可に設定
					// *************************************
					$("input[name='key_code']").prop('readonly', true);

					// *************************************
					// 明細部分を入力可能に変更
					// *************************************
					$("[name^='fld_'],#ref_btn").prop('disabled', false);

					// 氏名
					$("input[name='fld_name']").val( data.row["氏名"] );
					// フリガナ
					$("input[name='fld_kana']").val( data.row["フリガナ"] );
					// 給与
					$("input[name='fld_kyuyo']").val( data.row["給与"] );

					// 所属
					$("input[name='fld_syozoku']").val( data.row["所属"] );
					$("#ref_syozoku").text( data.row["所属名"] );

					// 性別
					$("select[name='fld_seibetu']").val( data.row["性別"] );
					// 生年月日
					$("input[name='fld_birth']").val( data.row["生年月日"].substring(0,10) );

					// フォーカスを設定
					$("input[name='fld_name']").focus();

					// コードをローカルストレージに保存
					localStorage["code"] = parent.$("input[name='key_code']").val();


					// エラーが無ければ次の処理を行えるようにする
					submit_type = "pass2";

				}

				// 対象データが無い場合
				if ( data.status == 1 ) {
					// エラーメッセージを表示
					toastr.error("入力された社員コードは存在しません");

					// エラー部分にフォーカスをセット
					$("input[name='key_code']").focus();
					// エラーが発生したフィールド内の文字列を選択する
					$("input[name='key_code']").select();

				}

				if ( data.status == -1 ) {
					// エラーメッセージを表示
					toastr.error("システムエラーです : SQL にあやまりがあります");

				}
				
			})
			// 失敗
			.fail(function(jqXHR, textStatus, errorThrown ){
				console.log( "status:" + textStatus );
				console.log( "errorThrown:" + errorThrown );

				// エラーメッセージを表示
				toastr.error("システムエラーです");

			})
			// 常に実行
			.always(function() {
			})
			;

		}


		// Bootstrap の モーダルダイアログの表示
		if ( submit_type == "pass2" ) {
			$("#update_check").modal();
		}

	});

	// **************************************
	// Bootstrap OK ボタン
	// ※ ここで第二パスの送信処理を確定
	// **************************************
	$("#data_update").on("click", function(){

		// Ajax で POSTする

		// 新規送信用オブジェクト
		var formData = new FormData();

		// ファイルオブジェクト
		formData.append("key_code", $("input[name='key_code']").val() );
		formData.append("fld_name", $("input[name='fld_name']").val() );
		formData.append("fld_kana", $("input[name='fld_kana']").val() );
		formData.append("fld_seibetu", $("select[name='fld_seibetu']").val() );
		formData.append("fld_birth", $("input[name='fld_birth']").val() );
		formData.append("fld_kyuyo", $("input[name='fld_kyuyo']").val() );
		formData.append("fld_syozoku", $("input[name='fld_syozoku']").val() );

		// **************************************
		// サーバ呼び出し
		// **************************************
		$.ajax({
			url: "app-update.php",
			type: "POST",
			data: formData,
			processData: false,  // jQuery がデータを処理しないよう指定
			contentType: false   // jQuery が contentType を設定しないよう指定
		})
		.done(function( data, textStatus ){
			console.log( "status:" + textStatus );
			console.log( "data:" + JSON.stringify(data, null, "    ") );

			// *************************************
			// コードを入力可に設定
			// *************************************
			$("input[name='key_code']").prop('readonly', false);

			// *************************************
			// 明細部分を入力不可に変更
			// *************************************
			$("[name^='fld_'],#ref_btn")
				.prop('disabled', true);

			// 氏名のクリア
			$("input[name='fld_name']").val( "" );
			// フリガナのクリア
			$("input[name='fld_kana']").val( "" );
			// 給与のクリア
			$("input[name='fld_kyuyo']").val( "" );

			// 所属のクリア
			$("input[name='fld_syozoku']").val( "" );
			$("#ref_syozoku").text("");

			// 性別の初期化
			$("select[name='fld_seibetu']").val( "0" );
			// 生年月日の初期化
			$("input[name='fld_birth']").val( "" );

			// フォーカスを設定
			$("input[name='key_code']").focus();
			
			// エラーが無ければ次の処理を行えるようにする
			submit_type = "pass1";

			toastr.info("更新されました");


		})
		.fail(function(jqXHR, textStatus, errorThrown ){
			console.log( "code:" + jqXHR.status );
			console.log( "status:" + textStatus );
			console.log( "errorThrown:" + errorThrown );
		})
		.always(function() {
		})
		;



	});

});
</script>


<input
	id="action_copy"
	type="submit"
	value="送信"
	class="btn btn-primary"
	onclick="$('#action').click();"
	style='float:right'>

<input
	id="action_reset"
	type="button"
	value="リセット"
	class="btn btn-danger mr-3"
	onclick="location.href='/access-1129/app/syain-upd/syain.php'"
	style='float:right'>

<form id="base" method="post" target="_self">
	<div>
		<div class="left">社員コード</div>
		<div class="right">
			<input
				type="text"
				id="key_code"
				name="key_code"
				class="unit"
				value="" required >
		</div>
	</div>
	<div>
		<div class="left">氏名</div>
		<div class="right">
			<input
				type="text"
				id="fld_name"
				name="fld_name"
				class="unit"
				value="" required >
		</div>
	</div>
	<div>
		<div class="left">フリガナ</div>
		<div class="right">
			<input
				type="text"
				id="fld_kana"
				name="fld_kana"
				class="unit"
				value=""  >
		</div>
	</div>
	<div>
		<div class="left">給与</div>
		<div class="right">
			<input
				type="text"
				id="fld_kyuyo"
				name="fld_kyuyo"
				class="unit"
				value="" required maxlength='7' pattern='\d+' >
		</div>
	</div>
	<div>
		<div class="left">所属</div>
		<div class="right">
			<div class="input-group">
				<input
					type="text"
					id="fld_syozoku"
					name="fld_syozoku"
					class="unit form-control"
					value=""
					maxlength="4"
					readonly>
		
				<span class="ml-2 pl-2 pt-2" id="ref_syozoku"></span>

				<input class="ml-2" type="button" value="参照" id="ref_btn">
			</div>
		</div>
	</div>
 
	<div>
		<div class="left">性別</div>
		<div class="right">
			<select class="unit form-control" name="fld_seibetu" id="fld_seibetu" >
				<option value="0">男性</option>
				<option value="1">女性</option>
			</select>
		</div>
	</div>

	<div>
		<div class="left">生年月日</div>
		<div class="right">
			<div class="input-group">
				<input readonly type="text" id="fld_birth" name="fld_birth">
				<button
					type="button"
					class="btn"
					onclick='$(this).prev().val("");'>×</button>
			</div>
		</div>
	</div>

	<div style='height:60px'>
		<div class="left"><label for="fld_skbn">正社員</label></div>
		<div class="right">
			<input type="checkbox" id="fld_skbn" name="fld_skbn" class="unit form-control" value="1" style="width: 1rem;margin-top: 14px;height 1rem">
		</div>
	</div>

	<div>
		<div class="left">年代</div>
		<div class="right">
			<div class="input-group">
				<label for="fld_nendai_a" class="mt-2">20代</label>
				<input type="radio" id="fld_nendai_a" name="fld_nendai" class="ml-1 mr-3" value="A" style="width: 1rem;margin-top: 0.75rem;">

				<label for="fld_nendai_b" class="mt-2">30代</label>
				<input type="radio" id="fld_nendai_b" name="fld_nendai" class="ml-1 mr-3" value="B" style="width: 1rem;margin-top: 0.75rem;">

				<label for="fld_nendai_c"  class="mt-2">40代</label>
				<input type="radio" id="fld_nendai_c" name="fld_nendai" class="ml-1 mr-3" value="C" style="width: 1rem;margin-top: 0.75rem;">

				<label for="fld_nendai_d"  class="mt-2">50代</label>
				<input type="radio" id="fld_nendai_d" name="fld_nendai" class="ml-1" value="D" style="width: 1rem;margin-top: 0.75rem;">
			</div>
		</div>
	</div>

	<div>
		<input
		id="action"
			type="submit"
			value="送信"
			class="btn btn-primary unit mt-5"
			title="mt5 は margin-top の略で 1〜5">
	</div>

</form>

<div class="modal fade" id="update_check" tabindex="-1" role="dialog" aria-labelledby="myModalLabel">
	<div class="modal-dialog" role="document">
		<div class="modal-content">

			<div class="modal-header">
				<button type="button" class="close" data-dismiss="modal" aria-label="Close"><span aria-hidden="true">&times;</span></button>
				<h4 class="modal-title" id="myModalLabel">確認</h4>
			</div>

			<div class="modal-body">
			更新しますか?
			</div>

			<div class="modal-footer">
				<button id="data_update" type="button" class="btn btn-default" data-dismiss="modal">OK</button>
			</div>

		</div>
	</div>
</div>





posted by lightbox at 2018-02-08 10:03 | Comment(0) | jQuery | このブログの読者になる | 更新情報をチェックする

2018年02月07日


VBScript : めんどくさいフォルダを開く

スクリプトです。ダウンロードして使用して下さい。

1) デスクトップ
Set obj = CreateObject("Shell.Application")
Set objFolder = obj.NameSpace( &h0 )
obj.Explore(objFolder.Self.Path)


2) HOSTS のあるディレクトリ
Set obj = CreateObject("Shell.Application")
Set objFolder = obj.NameSpace( &h25 )
obj.Explore(objFolder.Self.Path&"\drivers\etc")

3) コントロールパネル
Set obj = CreateObject("Shell.Application")
Set objFolder = obj.NameSpace( &h3 )
obj.Explore(objFolder.Self.Path)


4) 最近盛った項目
Set obj = CreateObject("Shell.Application")
Set objFolder = obj.NameSpace( &h8 )
obj.Explore(objFolder.Self.Path)


5) SysWOW64
Set obj = CreateObject("Shell.Application")
Set objFolder = obj.NameSpace( &h29 )
obj.Explore(objFolder.Self.Path)


6) Microsoft Framework
Set obj = CreateObject("Shell.Application")
Set objFolder = obj.NameSpace( &h24 )
obj.Explore(objFolder.Self.Path & "\Microsoft.NET\Framework" )


以下の番号を 1) のスクリプトの &h0 に置き換えると、それぞれの特殊フォルダを開きます。ですから、そのパスを基点とした良く使うけれど、面倒な場所にあるフォルダの位置をスクリプトに追加で書き込むといいです。( 例: HOSTS のあるディレクトリ )

DESKTOP0x00
PROGRAMS0x02
CONTROLS0x03
PRINTERS0x04
PERSONAL0x05
FAVORITES0x06
STARTUP0x07
RECENT0x08
SENDTO0x09
BITBUCKET0x0a
STARTMENU0x0b
DESKTOPDIRECTORY0x10
DRIVES0x11
NETWORK0x12
NETHOOD0x13
FONTS0x14
TEMPLATES0x15
COMMONSTARTMENU0x16
COMMONPROGRAMS0x17
COMMONSTARTUP0x18
COMMONDESKTOPDIR0x19
APPDATA0x1a
PRINTHOOD0x1b
LOCALAPPDATA0x1c
ALTSTARTUP0x1d
COMMONALTSTARTUP0x1e
COMMONFAVORITES0x1f
INTERNETCACHE0x20
COOKIES0x21
HISTORY0x22
COMMONAPPDATA0x23
WINDOWS0x24
SYSTEM0x25
PROGRAMFILES0x26
MYPICTURES0x27
PROFILE0x28
SYSTEMx860x29
PROGRAMFILESx860x30



タグ:VBScript
posted by lightbox at 2018-02-07 21:57 | Windows | このブログの読者になる | 更新情報をチェックする
container 終わり

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

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