SQLの窓

2018年02月12日


VBScript : コンピュータ名の取得

WshNetwork

WshNetwork オブジェクト
Set objNetwork = CreateObject("WScript.Network")
Wscript.Echo objNetwork.ComputerName
Wscript.Echo objNetwork.UserName
Wscript.Echo objNetwork.UserDomain

WMI

Hey, Scripting Guy! 
WMI を使用してローカル コンピュータの名前を判別する方法はありますか

Win32_ComputerSystem class

以下は、Win32_ComputerSystem で取得できる string を表示したものです。(cscript.exe の実行を強制して、コマンドプロンプトで表示しています)
Crun()

strComputer = "."  

Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\cimv2")  
Set colItems = objWMIService.ExecQuery("Select * From Win32_ComputerSystem")  
	
For Each objItem in colItems

	Wscript.Echo objItem.Name  
	Wscript.Echo objItem.Domain  
	Wscript.Echo objItem.PrimaryOwnerName

	Wscript.Echo objItem.BootupState
	Wscript.Echo objItem.Caption
	Wscript.Echo objItem.ChassisSKUNumber
	Wscript.Echo objItem.CreationClassName
	Wscript.Echo objItem.Description
	Wscript.Echo objItem.DNSHostName
	Wscript.Echo objItem.LastLoadInfo
	Wscript.Echo objItem.Manufacturer
	Wscript.Echo objItem.Model
	Wscript.Echo objItem.NameFormat
	Wscript.Echo objItem.PrimaryOwnerContact
	Wscript.Echo objItem.Status
	Wscript.Echo objItem.SystemFamily
	Wscript.Echo objItem.SystemSKUNumber
	Wscript.Echo objItem.SystemType
	Wscript.Echo objItem.UserName
	Wscript.Echo objItem.Workgroup

Next 

' **********************************************************
' Cscript.exe で実行を強制
' Cscript.exe の実行終了後 pause で一時停止
' **********************************************************
Function Crun( )

	Dim str,WshShell

	str = WScript.FullName
	str = Right( str, 11 )
	str = Ucase( str )
	if str <> "CSCRIPT.EXE" then
		str = WScript.ScriptFullName

		Set WshShell = CreateObject( "WScript.Shell" )

		strParam = " "
		For I = 0 to Wscript.Arguments.Count - 1
			if instr(Wscript.Arguments(I), " ") < 1 then
				strParam = strParam & Wscript.Arguments(I) & " "
			else
				strParam = strParam & Dd(Wscript.Arguments(I)) & " "
			end if
		Next
		Call WshShell.Run( "cmd.exe /c cscript.exe " & Dd(str) & strParam & " & pause", 1 )
		WScript.Quit
	end if

End Function
' **********************************************************
' 文字列を " で囲む関数
' **********************************************************
Function Dd( strValue )

	Dd = """" & strValue & """"

End function




posted by lightbox at 2018-02-12 00:15 | VBScript ベーシック | このブログの読者になる | 更新情報をチェックする

VBScript : クリップボードデータの取得


Set objIE = CreateObject("InternetExplorer.Application")
objIE.Navigate("about:blank")
Do While objIE.Busy
	' 100 ミリ秒
	Wscript.Sleep 100
Loop
strText = objIE.document.parentWindow.clipboardData.GetData( "Text" ) & ""
objIE.Quit

Wscript.Echo strText

InternetExplorer を使うので、セキュリティ設定でクリップボードの扱いが制限されている場合があります



デフォルトではダイアログボックスが表示されて、貼り付けても良いか(またはコピーしても良いか)確認を要求されます。



『アクセスを許可する』をクリックすると、クリップボードからデータを取得します。このダイアログを表示したく無い場合は、セキュリティ設定で『有効にする』と設定して保存して下さい。

うまく動作させる為の重要なポイント

about:blank の場合、Busy プロパティは殆ど必要無いはずですが、実際のページの場合は Busy プロパティのチェックが必要なので、普段から、このように書いておいたほうが良いでしょう
※ ReadyState の 4( 完了 ) をチェックしている方も居られるようです  



タグ:VBScript
posted by lightbox at 2018-02-12 00:14 | VBScript ベーシック | このブログの読者になる | 更新情報をチェックする

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>




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 | 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: * データの表示">





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

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 | このブログの読者になる | 更新情報をチェックする
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 終わり