SQLの窓

2014年12月19日


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

昔から一般的に使われて来た方法です。ファイルの種類は設定できません。どうしても VBScript でファイルを開く為のダイアログを正しく使いたい場合は、COM を作成して呼び出す必要があります。

しかし、本来 VBScript で行う処理は簡易的なものなのでそこまでこだわる必要も無いのでこれで十分使えると思います。

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

このソースは拡張子が .wsf 用です。最近は書庫の中に .vbs をカタログしてダウンロードさせると Google Chrome で危険扱いされるので .wsf が良いと思います。
<JOB>
<SCRIPT language="VBScript">
' ************************************************
' ファイルを開くダイアログの為に他を全て最小化する
' ************************************************
Set objShell = Wscript.CreateObject("shell.application")
objShell.MinimizeAll

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

MsgBox( strValue )

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

	Set IEDocument = Wscript.CreateObject("InternetExplorer.Application")
	IEDocument.Navigate( "about:blank" )
	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 2014-12-19 22:44 | VBScript ベーシック | このブログの読者になる | 更新情報をチェックする

2014年08月12日


VBScript : WSH : (超) 雛型

VBScript の非常に便利なのに、おそらくあまり知られていない使い方です。拡張子は .wsf として下さい

関連する記事

VBScript : Twitter API を呼び出して投稿する


※ REFERENCE 要素でオブジェクトに定義されている定数を参照可能にしています。
※ RESOURCE 要素でソース内にテキストを定義できます
※ SCRIPT 要素を使用すると、URL を指定して外部ライブラリを読み込む事ができます
※ JavaScript のライブラリを読み込んで、呼び出す事も可能です

Wsh_skeleton
<JOB>
<COMMENT>
************************************************************
■著作権その他

このプログラムはフリーです。どうぞ自由に御使用ください。
著作権は作者である私(lightbox)が保有しています。
また、本ソフトを運用した結果については、作者は一切責任を
負えせんのでご了承ください。
************************************************************
</COMMENT>

<OBJECT id="WshShell" progid="WScript.Shell" />
<OBJECT id="Fso" progid="Scripting.FileSystemObject" />
<OBJECT id="Dic" progid="Scripting.Dictionary" />
<OBJECT id="Shell" progid="Shell.Application" />

<OBJECT id="Cn" progid="ADODB.Connection" />
<OBJECT id="Rs" progid="ADODB.Recordset" />
<OBJECT id="Stream" progid="ADODB.Stream" />
<OBJECT id="Adox" progid="ADOX.Catalog" />

<REFERENCE object="ADODB.Connection" />

<SCRIPT language=VBScript>
' ***********************************************************
' 処理開始
' ***********************************************************
' REFERENCE 要素定義の為可能な定数参照
Wscript.Echo "adUseNone = " & adUseNone
Wscript.Echo "adUseServer = " & adUseServer
Wscript.Echo "adUseClient = " & adUseClient
Wscript.Echo "adUseClientBatch = " & adUseClientBatch

' ソース内テキストデータの表示
Wscript.Echo RegTrim(GetResource("myTextData"))

' GUI 
if vbCancel = MsgBox( "処理が終了しました   ", vbOKCancel , "サンプル" ) then
	Wscript.Echo "キャンセルされました"
end if

' ***********************************************************
' 文字列前後の漢字スペースを含むホワイトスペースの削除
' ***********************************************************
Function RegTrim( strValue )

	Dim regEx, str

	Set regEx = New RegExp
	regEx.IgnoreCase = True
	regEx.Pattern = "^[ \s]+"
	str = regEx.Replace( strValue, "" )
	regEx.Pattern = "[ \s]+$"
	RegTrim = regEx.Replace( str, "" )

End Function
</SCRIPT>

<COMMENT>
************************************************************
 ソース内テキストデータ
************************************************************
</COMMENT>
<RESOURCE id="myTextData">
<![CDATA[
Hello World!!
]]>
</RESOURCE>

</JOB>

Microsoft でADOの定数の値を確認

ADO Enumerated Constants

PowerShell で以下のようにしても確認できます
[enum]::GetNames([ADODB.CursorLocationEnum])

[ADODB.CursorLocationEnum]::adUseNone.value__
[ADODB.CursorLocationEnum]::adUseServer.value__
[ADODB.CursorLocationEnum]::adUseClient.value__
[ADODB.CursorLocationEnum]::adUseClientBatch.value__



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

2011年08月12日


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

WshNetwork

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

Hey, Scripting Guy! 
WMI を使用してローカル コンピュータの名前を判別する方法はありますか
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
Next 


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

2010年02月03日


VBScript : 文字列のバイト計算

定ピッチのフォントを使って、文字列として表示をコントロールしたい場合、
日本語としての「全角/半角」を知る為の手段として有効です。
REM **********************************************************
REM 文字列のバイト計算
REM **********************************************************
Function ByteLen( strTarget )

	Dim i,nLen,nRet,strMoji,nAsc

	nRet = 0

	nLen = Len( strTarget )

	For i = 1 to nLen
		nRet = nRet + 2
		strMoji = Mid( strTarget, i, 1 )
		nAsc = Asc( strMoji )
		if &H0 <= nAsc and nAsc <= &H80 then
			nRet = nRet - 1
		end if
		if &HA0 <= nAsc and nAsc <= &HDF then
			nRet = nRet - 1
		end if
		if &HFD <= nAsc and nAsc <= &HFF then
			nRet = nRet - 1
		end if
	Next

	ByteLen = nRet

End Function
関連する記事
VBScript と Javascript の表示文字列用バイト計算


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

2009年08月13日


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


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 を使うので、セキュリティ設定でクリップボードの扱いが制限されている場合があります( IEによるスクリプトの制限の解除 )

重要なポイント

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

応用

通常はエクスプローラでコピーしたファイルリストは取得できませんが、以下を併用すると取得する事ができます

エクスプローラでコピーしたファイルリストを取得する




タグ:VBScript
posted by lightbox at 2009-08-13 04:21 | VBScript ベーシック | このブログの読者になる | 更新情報をチェックする

2009年07月03日


VBScriptで、ビットをスイッチとして使う記述

C言語と同じです。
| に相当する or を使用したり、& に相当する and を使用してビット演算が可能です

Or 演算子は、2 つの数式内の対応するビットに対するビット単位の比較も行います。
And 演算子は、2 つの数式内の対応するビットに対するビット単位の比較も行います
Xor 演算子は、2 つの数式内の対応するビットに対するビット単位の比較も行います。
Not 演算子は、変数に対してビット単位の反転も行います。

' 00000001	スイッチA
' &H1
' 00000010	スイッチB
' &H2
' 00000100	スイッチC
' &H4
' 00001000	スイッチD
' &H8

' スイッチA と スイッチ C をオンにする

flag = &H1 or &H4 ' ( つまり、&H5 )

' それぞれのスイッチがオンの時にメッセージを表示

if ( flag and &H1 ) = &H1 then
	Wscript.Echo "スイッチA"
end if
if ( flag and &H2 ) = &H2 then
	Wscript.Echo "スイッチB"
end if
if ( flag and &H4 ) = &H4 then
	Wscript.Echo "スイッチC"
end if
if ( flag and &H8 ) = &H8 then
	Wscript.Echo "スイッチD"
end if



posted by lightbox at 2009-07-03 17:54 | VBScript ベーシック | このブログの読者になる | 更新情報をチェックする

2009年06月10日


Cscript.exe で実行を強制

WSH のテストをする場合、GUI を使用するとどうしても Wscript.exe が起動されて、デバッグの為に表示している Wscript.Echo が 実行毎にダイアログ表示になってしまいます。これでは、ループ内で処理している場合等は悲惨な事になりますね。

そうならない為の関数です

具体的には コマンドプロンプトを開いて、終了したら PAUSE します。
( "Cscript.exe スクリプト名" で実行すると、PAUSE は実行されません )

▼ 利用サンプル
デスクトップのショートカットのアイコン情報を取得する
' **********************************************************
' Cscript.exe で実行を強制
' ウィンドウをアクティブにし、最大化ウィンドウとして表示(3)
' 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", 3 )
		WScript.Quit
	end if

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

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

End function



タグ:WSH VBScript
posted by lightbox at 2009-06-10 16:23 | VBScript ベーシック | このブログの読者になる | 更新情報をチェックする
Seesaa の各ページの表示について
Seesaa の 記事がたまに全く表示されない場合があります。その場合は、設定> 詳細設定> ブログ設定 で 最新の情報に更新の『実行ボタン』で記事やアーカイブが最新にビルドされます。

Seesaa のページで、アーカイブとタグページは要注意です。タグページはコンテンツが全く無い状態になりますし、アーカイブページも歯抜けページはコンテンツが存在しないのにページが表示されてしまいます。

また、カテゴリページもそういう意味では完全ではありません。『カテゴリID-番号』というフォーマットで表示されるページですが、実際存在するより大きな番号でも表示されてしまいます。

※ インデックスページのみ、実際の記事数を超えたページを指定しても最後のページが表示されるようです

対処としては、このようなヘルプ的な情報を固定でページの最後に表示するようにするといいでしょう。具体的には、メインの記事コンテンツの下に『自由形式』を追加し、アーカイブとカテゴリページでのみ表示するように設定し、コンテンツを用意するといいと思います。


※ エキスパートモードで表示しています

アーカイブとカテゴリページはこのように簡単に設定できますが、タグページは HTML 設定を直接変更して、以下の『タグページでのみ表示される内容』の記述方法で設定する必要があります

<% if:page_name eq 'archive' -%>
アーカイブページでのみ表示される内容
<% /if %>

<% if:page_name eq 'category' -%>
カテゴリページでのみ表示される内容
<% /if %>

<% if:page_name eq 'tag' -%>
タグページでのみ表示される内容
<% /if %>
この記述は、以下の場所で使用します


Windows
container 終わり

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

Android SDK ポケットリファレンス
改訂版 Webデザイナーのための jQuery入門
今すぐ使えるかんたん ホームページ HTML&CSS入門
CSS ドロップシャドウの参考デモ
PHP正規表現チェッカー
Google Hosted Libraries
cdnjs
BUTTONS (CSS でボタン)
イラストAC
ぱくたそ
写真素材 足成
フリーフォント一覧
utf8 文字ツール
右サイド 終わり
base 終わり