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

2014年06月25日

【VBS】WshShell.Runによる外部プログラムの実行のバリエーションと注意事項

VBScript を何の為に使うかという場合、最も一般的に利用価値の高いのは、やはりプログラムの実行です。

わりと簡単に使えるのですが、プログラム(言語)でもあるので、専門知識が無ければ、なかなか難しい部分もあります。しかし、実行だけで言えば、2行で書けるので、その場合に「できること」を知っておくと絶対に得をします。

同期処理(コマンドプロンプトウインドウを開かない)
Set WshShell = WScript.CreateObject("WScript.Shell")
Call WshShell.Run( "zip.exe -r homepage D:\nifty\homepage", 0, True )


同期処理(コマンドプロンプトウインドウを開く)
Set WshShell = WScript.CreateObject("WScript.Shell")
Call WshShell.Run( "zip.exe -r homepage D:\nifty\homepage", , True )


非同期処理
Set WshShell = WScript.CreateObject("WScript.Shell")
WshShell.Run( "zip.exe -r homepage D:\nifty\homepage" )

関連するページ

WshShell.Run による外部プログラムの実行 :外部プログラムの実行



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

2014年05月27日

カレントディレクトリを AnHttpd の Alias として登録する

以前 HTA で作成していましたが、管理者権限等の関係で使いづらくなっていたので、単純な VBScript に変更しました。


Set Shell = CreateObject("Shell.Application")
if WScript.Arguments.Count = 0 then
	Shell.ShellExecute "cmd.exe", "/c Cscript.exe """ & Wscript.ScriptFullName & """ dummy & pause", "", "runas", 1
	Wscript.Quit
end if

Set WshShell = CreateObject("WScript.Shell")
Set Fso = CreateObject("Scripting.FileSystemObject")

Set objBasic = new basic : objBasic
Set objWmireg = new wmireg : objWmireg

Call SetAlias()

Function SetAlias( )

' ***********************************************************
' 処理開始
' ***********************************************************
	' 対象のレジストリを決定
	strTarget = "default"
	strTarget = "SOFTWARE\AnHttpd\" & strTarget & "\Alias"
	' 仮想ディレクトリの一覧を取得する
	Set var = objWmireg.GetLValueArray( strTarget )
	
	' 仮想ディレクトリ名を決定
	strAlias = " /" & objBasic.var("ScriptCurDirName")

' ***********************************************************
' 既にあれば上書き、無ければ追加
' ***********************************************************
	if not var.Exists( strAlias ) then
		nValue = var("Count") + 1
		objWmireg.SetLDword strTarget, "Count", nValue
	end if
	' 物理ディレクトリは、このスクリプトのあるパス
	objWmireg.SetLString strTarget, strAlias, objBasic.var("ScriptCurDir") 


	Wscript.Echo objBasic.var("ScriptCurDir") & vbCrLf & " を AnHttpd の一般パスのエイリアスとして登録しました" & vbCrLf

End Function

Class basic

Public var
Public objWMIService
 
' ************************************************
' コンストラクタ
' ************************************************
Public Default Function InitSetting()

	Dim obj,objOS

	Set var = CreateObject( "Scripting.Dictionary" )

	' スクリプトが存在するディレクトリ(WSH用)
	on error resume next
	ScriptCurDir = WScript.ScriptFullName
	Set obj = Fso.GetFile( ScriptCurDir )
	Set obj = obj.ParentFolder
	var("ScriptCurDir") = obj.Path
	Set obj = Fso.GetFolder( var("ScriptCurDir") )
	var("ScriptCurDirName") = obj.Name
	on error goto 0

	Set objWMIService = GetObject("winmgmts:" _
	 & "{impersonationLevel=impersonate}!\\.\root\cimv2")

	Set obj = objWMIService.ExecQuery( _
		"Select * from Win32_OperatingSystem")
	on error resume next
	For Each objOS in obj
		var("OsName") = objOS.Caption
		var("ComputerName") = objOS.CSName
		var("ServicePack") = objOS.ServicePackMajorVersion _
		& "." & objOS.ServicePackMinorVersion
		var("WinDir") = objOS.WindowsDirectory
		var("SysDir") = objOS.SystemDirectory
	Next
	on error goto 0

end function

' ************************************************
' 環境文字列の一覧の取得
' ************************************************
Function GetAllValue()

	Dim str,key

	str = ""

	For Each key in var
		str = str & key & " = " & var(key) & vbCrLf
	Next

	GetAllValue = str

end function
 
' ************************************************
' 非同期実行
' ************************************************
Function RunASync( strPath )

	Call WshShell.Run( strPath )

end function

' ************************************************
' 同期実行
' ************************************************
Function RunSync( strPath )

	Call WshShell.Run( strPath, , True )

end function

' ************************************************
' コマンドプロンプト同期実行( プロンプトを開く )
' cmd.exe /c 以降を指定
' ************************************************
Function CmdSyncWithConsole( strPath, bPause )

	if bPause then
		Call WshShell.Run( _
		"cmd.exe /c " & strPath & " & pause", , True )
	else
		Call WshShell.Run( _
		"cmd.exe /c " & strPath, , True )
	end if

end function

' ************************************************
' コマンドプロンプト同期実行( プロンプトを開かない )
' cmd.exe /c 以降を指定
' ************************************************
Function CmdSyncWithoutConsole( strPath )

	Call WshShell.Run( _
		"cmd.exe /c " & strPath, 0, True )

end function

End Class

const WMI_HKEY_LOCAL_MACHINE = &H80000002
const WMI_REG_SZ = 1 
const WMI_REG_EXPAND_SZ = 2 
const WMI_REG_BINARY = 3 
const WMI_REG_DWORD = 4 
const WMI_REG_MULTI_SZ = 7 

Class wmireg

Public objReg 
 
' ************************************************
' コンストラクタ
' ************************************************
Public Default Function InitSetting()
 
	Set objReg = _
		GetObject("winmgmts:{impersonationLevel=impersonate}!\\" & _
		".\root\default:StdRegProv") 
 
end function

' ************************************************
' サブキーの配列を取得
' ************************************************
Function GetLSubKeyArray( strPath )

	Dim aSubKeys,str

	objReg.EnumKey WMI_HKEY_LOCAL_MACHINE, strPath, aSubKeys
	GetLSubKeyArray = aSubKeys
 
end function

' ************************************************
' 値の一覧の連想配列を取得
' ************************************************
Function GetLValueArray( strPath )

	Dim aValueNames, aValueTypes, strValue, aValue

	Set var = CreateObject( "Scripting.Dictionary" )

	objReg.EnumValues WMI_HKEY_LOCAL_MACHINE, strPath,_ 
		aValueNames, aValueTypes 
	For i=0 To UBound(aValueNames)
		Select Case aValueTypes(i) 
			Case WMI_REG_SZ
				objReg.GetStringValue _
				WMI_HKEY_LOCAL_MACHINE,strPath,aValueNames(i),strValue
				var(aValueNames(i)) = strValue
			Case WMI_REG_EXPAND_SZ
				objReg.GetExpandedStringValue _
				WMI_HKEY_LOCAL_MACHINE,strPath,aValueNames(i),strValue
				var(aValueNames(i)) = strValue
			Case WMI_REG_DWORD
				objReg.GetDWORDValue _
				WMI_HKEY_LOCAL_MACHINE,strPath,aValueNames(i),strValue
				var(aValueNames(i)) = strValue
			Case WMI_REG_MULTI_SZ
				objReg.GetMultiStringValue _
				WMI_HKEY_LOCAL_MACHINE,strPath,aValueNames(i),aValue
				var(aValueNames(i)) = aValue
			Case WMI_REG_BINARY 
				objReg.GetBinaryValue _
				WMI_HKEY_LOCAL_MACHINE,strPath,aValueNames(i),aValue
				var(aValueNames(i)) = aValue
		End Select 
	Next 

	Set GetLValueArray = var

end function

' ************************************************
' 文字列セット
' ************************************************
Function SetLString( strPath, strName, strValue )

	objReg.SetStringValue _
		WMI_HKEY_LOCAL_MACHINE,strPath,strName,strValue 

end function

' ************************************************
' 整数セット
' ************************************************
Function SetLDword( strPath, strName, dwValue )

	objReg.SetDWORDValue _
		WMI_HKEY_LOCAL_MACHINE,strPath,strName,dwValue

end function

End Class




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

2014年05月04日

VBScript : SQLExpress(SQLServer) に販売管理Bを作成する


VBScript : SQLExpress( SQLServer ) に 販売管理B を作成する


販売管理B.mdb は、SQL学習用として2005年9月に作成した MDB のテーブルとビューのセットです。SQLExpress と同じ Microsoft 純正ですので、インポートは高速で簡単に実行する事ができます。ただ、テーブルの定義が SQLExpress 依存になりますので、スクリプト内から新たに DDL を実行しています。

SQLの窓 Build C++ のスクリプトにも追加

SQLの窓 Build C++ のダウンロードページ


テーブル名 タイプ 作成 更新 件数   
1 V_商品一覧 VIEW 2005/09/13 1:50:36 2005/09/13 1:50:36 100
2 V_売上日付 VIEW 2005/09/13 1:50:36 2005/09/13 1:50:36 1
3 V_得意先台帳 VIEW 2005/09/13 1:50:36 2005/09/13 1:50:36 2463
4 V_社員一覧 VIEW 2005/09/13 1:50:36 2005/09/13 1:50:36 50
5 コード名称マスタ TABLE 2005/09/13 1:49:04 2005/09/13 1:49:04 17
6 コントロールマスタ TABLE 2005/09/13 1:49:04 2005/09/13 1:49:04 1
7 メッセージマスタ TABLE 2005/09/13 1:49:04 2005/09/13 1:49:04 13
8 取引データ TABLE 2005/09/13 1:49:04 2005/09/13 1:49:04 2463
9 商品マスタ TABLE 2005/09/13 1:49:04 2005/09/13 1:49:04 100
10 商品分類マスタ TABLE 2005/09/13 1:49:04 2005/09/13 1:49:04 29
11 得意先マスタ TABLE 2005/09/13 1:49:04 2005/09/13 1:49:04 50
12 社員マスタ TABLE 2005/09/13 1:49:04 2005/09/13 1:49:04 50
13 郵便番号マスタ TABLE 2005/09/13 1:57:58 2005/09/13 1:57:58 3715



posted by at 2014-05-04 21:17 | VBScript | このブログの読者になる | 更新情報をチェックする

2014年04月17日

VBScript : 拡張子との関連付けでアプリケーションを起動する

コマンドプロンプト内のコマンドの start コマンドを使用して、カレントディレクトリにあるファイルを実行します。但し、コマンドプロンプトが開かないように、WshShell.Run に第二引数を 0、第三引数を同期実行として true に設定しています。
Set WshShell = CreateObject( "WScript.Shell" )
Call WshShell.Run( "cmd.exe /c start " & "ProcessList.htm",0, true )

rundll32.exe shell32.dll,ShellExec_RunDLL を使用して拡張子と関連付けられたアプリケーションを使用します。但し、対象となるファイルが絶対パスである必要があるので、コマンドプロンプトの特性を利用してカレントディレクトリのパスを付加しています。
Set WshShell = CreateObject( "WScript.Shell" )
Call WshShell.Run( "cmd.exe /c rundll32.exe shell32.dll,ShellExec_RunDLL ""%CD%\ProcessList.htm""",0, true )

rundll32.exe shell32.dll,ShellExec_RunDLL を使用しています。一つ前と同じですが、絶対パスの付加方法として、FOR コマンドを利用しています。
Set WshShell = CreateObject( "WScript.Shell" )
Call WshShell.Run( "cmd.exe /c FOR /F %i IN ('ProcessList.htm') DO rundll32.exe shell32.dll,ShellExec_RunDLL ""%~fi""",0, true )

rundll32.exe shell32.dll,ShellExec_RunDLL を使用していますが、絶対パスを付加する為の情報を、VBScript 内で取得するので、実行時にコマンドプロンプトを使用していないので、WshShell.Run の引数はコマンドのみです。
Set WshShell = CreateObject( "WScript.Shell" )
Call WshShell.Run( "rundll32.exe shell32.dll,ShellExec_RunDLL " & """" & WshShell.CurrentDirectory & "\ProcessList.htm""" )





posted by at 2014-04-17 23:38 | VBScript | このブログの読者になる | 更新情報をチェックする

実行されたプログラムがどこにあって、どのように実行されているか

早い話、タスクマネージャに表示されている、より詳しい情報を取得です。パスが通ってるファイルを実行した時の実際の場所を知りたい時や、なんか、気になる(ウイルス?)プログラムの起動場所を知りたい時に使います


Set Fs = CreateObject( "Scripting.FileSystemObject" )
Set WshShell = CreateObject( "WScript.Shell" )
Set OutFile = Fs.OpenTextFile( "ProcessList.htm", 2, True )

strComputer = "." 
Set objWMIService = GetObject("winmgmts:" _ 
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2") 
Set col = objWMIService.ExecQuery _ 
    ("Select * from Win32_Process") 
result = ""
OutFile.WriteLine "<html><head><title>ProcessList</title>"
OutFile.WriteLine "<meta http-equiv=""Content-Type"" content=""text/html; charset=shift_jis"">"
OutFile.WriteLine "<style type=""text/css"">* { font-size:12px;}"

str=""
str=str&"table { "&vbCrLf
str=str&"	border-collapse: collapse; "&vbCrLf
str=str&"	border-style: solid; "&vbCrLf
str=str&"	border-color: #000000; "&vbCrLf
str=str&"	border-width: 1px; "&vbCrLf
str=str&"	background-color: #FFFFFF; "&vbCrLf
str=str&"} "&vbCrLf
str=str&"td { "&vbCrLf
str=str&"	padding: 5px; "&vbCrLf
str=str&"	border-style: solid; "&vbCrLf
str=str&"	border-color: #000000; "&vbCrLf
str=str&"	border-width: 1px; "&vbCrLf
str=str&"} "&vbCrLf
str=str&"th { "&vbCrLf
str=str&"	padding: 5px; "&vbCrLf
str=str&"	border-style: solid; "&vbCrLf
str=str&"	border-color: #000000; "&vbCrLf
str=str&"	border-width: 1px; "&vbCrLf
str=str&"	background-color: silver; "&vbCrLf
str=str&"} "&vbCrLf
OutFile.WriteLine str

OutFile.WriteLine "</style>"
OutFile.WriteLine "</head><body>"
OutFile.WriteLine "<table>"
OutFile.WriteLine "<tr>"
OutFile.WriteLine "<th>名称</th>"
OutFile.WriteLine "<th>パス</th>"
OutFile.WriteLine "<th>コマンドライン</th>"
OutFile.WriteLine "</tr>"
nCnt = 0
For Each obj in col 
	OutFile.WriteLine "<tr>"
	strCss = ""
	if nCnt Mod 2 = 0 then
		strCss = "style='background-color:#D0D0D0;'"
	end if
	OutFile.WriteLine "<td nowrap " & strCss & "><B>" & obj.Caption & "</b></td>"
	OutFile.WriteLine "<td nowrap " & strCss & ">" & obj.ExecutablePath & "</td>"
	on error resume next
	OutFile.WriteLine "<td nowrap " & strCss & ">" & obj.CommandLine & "</td>"
	on error goto 0
	OutFile.WriteLine "</tr>"
	nCnt = nCnt + 1
Next 
OutFile.WriteLine "</table></body></html>"
OutFile.Close

Call WshShell.Run( "cmd.exe /c start " & "ProcessList.htm",0, true )

このソース内部の CSS 部分の出力文字列の作成は、テキスト変換サービスの VBS で可能です。





タグ:WMI VBScript
posted by at 2014-04-17 05:42 | VBScript | このブログの読者になる | 更新情報をチェックする

指定した位置でレジストリエディタを開く為のスクリプトをダウンロードします

 
レジストリの目的のパスを開くのは、慣れていても時間がかかります。VBScript の先頭のパス部分変えるだけで利用可能です。
 

以下のような VBScript としてダウンロードされます
strParam = "HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\Favorites"

' レジストリ書き込み用
Set WshShell = CreateObject( "WScript.Shell" )
' WMI用
Set objWMIService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

' レジストリエディタが最後に開いていたキーの登録を行います
strPath = "Software\Microsoft\Windows\CurrentVersion\Applets\Regedit\LastKey"
if GetOSVersion() >= 6 then
	strRegPath = "コンピュータ\" & strParam
else
	strRegPath = "マイ コンピュータ\" & strParam
end if

' 既に regedit が実行中の場合はいったん終了させます
Set colProcessList = objWMIService.ExecQuery _ 
	("Select * from Win32_Process Where Name = 'regedit.exe'") 
For Each objProcess in colProcessList
	' 最後のウインドウの位置とサイズを保存する為の終わらせ方
	WshShell.AppActivate("レジストリ エディタ")
	Wscript.Sleep(500)
	WshShell.SendKeys ("%{F4}")
	Wscript.Sleep(500)
	' 上記終わらせ方が失敗した時の強制終了
	on error resume next
	objProcess.Terminate() 
	on error goto 0
Next 

WshShell.RegWrite "HKCU\" & strPath, strRegPath, "REG_SZ"

' レジストリエディタを起動します
Call WshShell.Run( "regedit.exe" )
' レジストリエディタが終わるまで待つ場合は以下のようにします
' Call WshShell.Run( "regedit.exe", , True )

REM **********************************************************
REM OS バージョンの取得
REM **********************************************************
Function GetOSVersion()

	Dim colTarget,str,aData,I,nTarget

	Set colTarget = objWMIService.ExecQuery( _
		 "select Version 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

 


posted by at 2014-04-17 04:53 | VBScript | このブログの読者になる | 更新情報をチェックする

2014年04月04日

VBScript : 3種のMDB(または accdb)内の テーブル一覧取得方法

ADO を使うのが通常ですが、ADOX または、Access を直接使用してもかまいません。
※ このテストは、Microsoft Office 2010 がインストールされている環境で実行しています。
' ▼ コマンドプロンプトを開いて、終了したら PAUSE する。
Crun()

' ************************************************
' 基本設定
' ************************************************
' このスクリプトが存在するディレクトリを取得
strCurDir = WScript.ScriptFullName
strCurDir = Replace( strCurDir, WScript.ScriptName, "" )

' ************************************************
' OpenSchema
' ************************************************
Set Mdb = Wscript.CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.Jet.OLEDB.4.0;" & "Data Source=" & strCurDir & "\販売管理B.mdb" & ";"
Mdb.Open strConnection
Set Schema = Mdb.OpenSchema( 20 ,Array(Empty,Empty,Empty,Empty) )

Wscript.Echo "販売管理B.mdb のテーブル一覧を OpenSchema で取得します" & vbCrLf
Do while not Schema.EOF

	Wscript.Echo Schema.Fields( "TABLE_NAME" ).Value
	Schema.MoveNext
Loop
Mdb.Close()

Wscript.Echo vbCrLf

' ************************************************
' ADOX.Catalog
' ************************************************
Set Adox = Wscript.CreateObject("ADOX.Catalog")
Adox.ActiveConnection = strConnection

Wscript.Echo "販売管理B.mdb のテーブル一覧を ADOX.Catalog で取得します" & vbCrLf
For Each Table in  Adox.Tables

	Wscript.Echo Table.Name

Next

Wscript.Echo vbCrLf


' ************************************************
' Access.Application
' ************************************************
Set Access = Wscript.CreateObject("Access.Application")
Access.OpenCurrentDatabase( strCurDir & "\販売管理B.mdb" )

Wscript.Echo "販売管理B.mdb のテーブル一覧を Access.Application で取得します" & vbCrLf
For Each Table in  Access.CurrentDb.TableDefs

	Wscript.Echo Table.Name

Next

For Each View in  Access.CurrentDb.QueryDefs

	Wscript.Echo View.Name

Next

Wscript.Echo vbCrLf

' ************************************************
' OpenSchema
' ************************************************
Set Mdb = Wscript.CreateObject("ADODB.Connection")
strConnection = "Provider=Microsoft.ACE.OLEDB.12.0;" & "Data Source=" & strCurDir & "\販売管理B.accdb" & ";"
Mdb.Open strConnection
Set Schema = Mdb.OpenSchema( 20 ,Array(Empty,Empty,Empty,Empty) )

Wscript.Echo "販売管理B.accdb のテーブル一覧を OpenSchema(2007以降) で取得します" & vbCrLf
Do while not Schema.EOF

	Wscript.Echo Schema.Fields( "TABLE_NAME" ).Value
	Schema.MoveNext
Loop
Mdb.Close()

Wscript.Echo vbCrLf

' ************************************************
' ADOX.Catalog
' ************************************************
Set Adox = Wscript.CreateObject("ADOX.Catalog")
Adox.ActiveConnection = strConnection

Wscript.Echo "販売管理B.accdb のテーブル一覧を ADOX.Catalog(2007以降) で取得します" & vbCrLf
For Each Table in  Adox.Tables

	Wscript.Echo Table.Name

Next

Wscript.Echo vbCrLf


' ************************************************
' Access.Application
' ************************************************
Set Access = Wscript.CreateObject("Access.Application")
Access.OpenCurrentDatabase( strCurDir & "\販売管理B.accdb" )

Wscript.Echo "販売管理B.accdb のテーブル一覧を Access.Application で取得します" & vbCrLf
For Each Table in  Access.CurrentDb.TableDefs

	Wscript.Echo Table.Name

Next

For Each View in  Access.CurrentDb.QueryDefs

	Wscript.Echo View.Name

Next

Wscript.Echo vbCrLf


Wscript.Echo("【"&WScript.ScriptName&"】の処理が終了しました" & vbCrLf & vbCrLf )

' **********************************************************
' 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


処理結果
Microsoft (R) Windows Script Host Version 5.8
Copyright (C) Microsoft Corporation 1996-2001. All rights reserved.

販売管理B.mdb のテーブル一覧を OpenSchema で取得します

MSysAccessStorage
MSysACEs
MSysNavPaneGroupCategories
MSysNavPaneGroups
MSysNavPaneGroupToObjects
MSysNavPaneObjectIDs
MSysObjects
MSysQueries
MSysRelationships
V_商品一覧
V_売上日付
V_得意先台帳
V_社員一覧
コード名称マスタ
コントロールマスタ
メッセージマスタ
取引データ
商品マスタ
商品分類マスタ
得意先マスタ
社員マスタ
郵便番号マスタ


販売管理B.mdb のテーブル一覧を ADOX.Catalog で取得します

MSysAccessStorage
MSysACEs
MSysNavPaneGroupCategories
MSysNavPaneGroups
MSysNavPaneGroupToObjects
MSysNavPaneObjectIDs
MSysObjects
MSysQueries
MSysRelationships
V_商品一覧
V_売上日付
V_得意先台帳
V_社員一覧
コード名称マスタ
コントロールマスタ
メッセージマスタ
取引データ
商品マスタ
商品分類マスタ
得意先マスタ
社員マスタ
郵便番号マスタ


販売管理B.mdb のテーブル一覧を Access.Application で取得します

MSysAccessStorage
MSysACEs
MSysNavPaneGroupCategories
MSysNavPaneGroups
MSysNavPaneGroupToObjects
MSysNavPaneObjectIDs
MSysObjects
MSysQueries
MSysRelationships
コード名称マスタ
コントロールマスタ
メッセージマスタ
取引データ
商品マスタ
商品分類マスタ
得意先マスタ
社員マスタ
郵便番号マスタ
V_商品一覧
V_売上日付
V_得意先台帳
V_社員一覧


販売管理B.accdb のテーブル一覧を OpenSchema(2007以降) で取得します

MSysAccessStorage
MSysACEs
MSysComplexColumns
MSysNavPaneGroupCategories
MSysNavPaneGroups
MSysNavPaneGroupToObjects
MSysNavPaneObjectIDs
MSysObjects
MSysQueries
MSysRelationships
MSysResources
V_商品一覧
V_売上日付
V_得意先台帳
V_社員一覧
コード名称マスタ
コントロールマスタ
メッセージマスタ
取引データ
商品マスタ
商品分類マスタ
得意先マスタ
社員マスタ
郵便番号マスタ


販売管理B.accdb のテーブル一覧を ADOX.Catalog(2007以降) で取得します

MSysAccessStorage
MSysACEs
MSysComplexColumns
MSysNavPaneGroupCategories
MSysNavPaneGroups
MSysNavPaneGroupToObjects
MSysNavPaneObjectIDs
MSysObjects
MSysQueries
MSysRelationships
MSysResources
V_商品一覧
V_売上日付
V_得意先台帳
V_社員一覧
コード名称マスタ
コントロールマスタ
メッセージマスタ
取引データ
商品マスタ
商品分類マスタ
得意先マスタ
社員マスタ
郵便番号マスタ


販売管理B.accdb のテーブル一覧を Access.Application で取得します

MSysAccessStorage
MSysACEs
MSysComplexColumns
MSysNavPaneGroupCategories
MSysNavPaneGroups
MSysNavPaneGroupToObjects
MSysNavPaneObjectIDs
MSysObjects
MSysQueries
MSysRelationships
MSysResources
コード名称マスタ
コントロールマスタ
メッセージマスタ
取引データ
商品マスタ
商品分類マスタ
得意先マスタ
社員マスタ
郵便番号マスタ
V_商品一覧
V_売上日付
V_得意先台帳
V_社員一覧


【table_list.vbs】の処理が終了しました
関連する記事

posted by at 2014-04-04 00:52 | VBScript | このブログの読者になる | 更新情報をチェックする

2014年03月14日

VBScript : 手軽にタスクスケジューラ時間差実行

サービスで、Task Scheduler が実行されている事が前提です。自分は普段止めているので、スクリプトからサービスを開始する処理を付け加える必要がありますが、通常なら問題無いでしょう。

分単位で連続して起動するパラメータも設定可能ですが、それなら GUI で登録するほうが確実です。これは、1時間後とか5分後とかそういう目的に使用します。( 一回限りの実行 )

Windows7 でテストしていますが、対話を必要とするようなアプリケーションはセキュリティ理由と思われますが、かつて可能であった InteractWithDesktop フラグが動作しませんでした。しかし純粋なバッチ処理では動作を確認しています。
' 管理者として実行を強制する
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

ServiceString = "winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2"
Set objWMIService = GetObject( ServiceString )
Set objScheduledJob = objWMIService.Get( "Win32_ScheduledJob" )

Set colEvents = objWMIService.ExecQuery _ 
	("Select * from Win32_TimeZone" )
For Each obj In colEvents
	Utc = obj.Bias
	Exit For
Next

Set objDate = CreateObject("WbemScripting.SWbemDateTime") 
' 一分後
dtTargetDate = Now() + Cdate("0:01:00")
objDate.SetVarDate dtTargetDate, False
objDate.UTC = Utc
'Wscript.Echo objDate

Dim ret,JobId

ret = objScheduledJob.Create( "cscript.exe C:\user\lightbox\vbs\wk001\test.vbs", _
	objDate & "",,,,,JobId )

'Wscript.Echo ret
'Wscript.Echo JobId

'0 要求はが受け付けられました
'1 この要求はサポートされていません
'2 ユーザーは、必要なアクセス権限がありません
'8 Interactive process.
'9 The directory path to the service executable file cannot be found.
'21 無効なパラメータです
'22 アカウントにサービスにアクセスする権限がありません


▼ 動作を確認したスクリプト
Set WshShell = WScript.CreateObject("WScript.Shell")

WshShell.LogEvent 0, "ログ出力"

Set Fso = CreateObject( "Scripting.FileSystemObject" )
strCurPath = WScript.ScriptFullName
Set obj = Fso.GetFile( strCurPath )
Set obj = obj.ParentFolder
strCurPath = obj.Path

Set OutObj = Fso.OpenTextFile( strCurPath & "\バッチ.txt", 2, True )
OutObj.WriteLine "あいうえお"
OutObj.Close

実行後の確認は、コマンドプロンプトを管理者権限で実行して、at を実行すると登録された JOB が表示されます。何らかの理由で、実行に失敗するとタスク実行予定に残ったままになるので、 at JOB番号 /delete で削除します。


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

2014年03月02日

指定した位置でレジストリエディタを開く為のスクリプトをダウンロードするコンテンツ

特徴

※ コンテンツとして使えます。
※ 一度実行したパスはクッキーで保存されます。
※ IE でかつ内容を信頼するなら、「開く」で即実行できます。


▼ 埋め込んだ状態
PHP としてダウンロードは以下のリンク先です。
信頼してレジストリエディタを開くページ

▼ IFRAME のコード
<iframe src="http://toolbox.winofsql.jp/regopen.php"
	frameborder="0"
	scrolling="no"
	width="600"
	height="120"
></iframe>


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

2013年12月28日

指定サービスを一括で停止するスクリプト



*************************************************************
* 【list.vbs】
* 現在実行中のサービスの一覧より、停止対象を決定する為の
* テキストファイル( target.txt ) を作成する
*
* 【stop.vbs】
* target.txt で指定したサービスを停止する
*************************************************************

1) list.vbs をエクスプローラから実行して下さい

2) target.txt の中から停止したいサービス名の先頭のセミコロン
   を削除して下さい

3) stop.vbs をエクスプローラから実行して下さい



※ 再度 list.vbs を実行すると、target.txt に無いサービスを
   発見した場合は、リストの最後に追加します

※ サービスの依存関係は、上に依存元のサービスを持ってきて下さい。

※ 最初の作成では、全ての実行中のサービスリストが作成されますが、
   先頭にセミコロンが入ったままでは、stop.vbs を実行しても何も
   停止されません。


■著作権その他

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

lightbox
stop_service_started.vbs
' 管理者として実行を強制する
Set obj = Wscript.CreateObject("Shell.Application")
if Wscript.Arguments.Count = 0 then
	obj.ShellExecute "cscript.exe", WScript.ScriptFullName & " runas", "", "runas", 1
	Wscript.Quit
end if

str = WScript.FullName
str = Right( str, 11 )
str = Ucase( str )
if str <> "CSCRIPT.EXE" then
	strMessage = "エクスプローラから実行する場合は、stop.vbs を使用して下さい"
	WScript.Echo strMessage
	WScript.Quit
end if

Set Fso = Wscript.CreateObject( "Scripting.FileSystemObject" )

strCurPath = WScript.ScriptFullName
Set obj = Fso.GetFile( strCurPath )
Set obj = obj.ParentFolder
strCurDir = obj.Path

strServer = "."

on error resume next
Set objLocator = CreateObject("WbemScripting.SWbemLocator")
if Err.Number <> 0 then
	Wscript.Echo Err.Description
	Wscript.Quit
end if

Set objWmi = objLocator.ConnectServer( _
	strServer, _
	"root\cimv2", _
	strUser, _
	strPass )
if Err.Number <> 0 then
	Wscript.Echo Err.Description
	Wscript.Quit
end if

objWmi.Security_.ImpersonationLevel = 3
if Err.Number <> 0 then
	Wscript.Echo Err.Description
	Wscript.Quit
end if
on error goto 0

Set InObj = Fso.OpenTextFile( strCurDir & "\target.txt", 1 )
aTarget = Split( InObj.ReadAll(), vbCrLf )
InObj.Close()

For I = 0 to UBound( aTarget ) 

	if Trim( aTarget( I ) ) <> "" and Left( aTarget( I ), 1 ) <> ";" then

		strQuery = "select * from Win32_Service where Name = '" & aTarget(I) &  "'"
		Set objTarget = objWmi.ExecQuery( strQuery )

		on error resume next
		For Each obj in objTarget

			if obj.Started then
				obj.StopService()
				Wscript.Echo obj.Name & " を停止させました"
			end if

		Next
		on error goto 0

		' 終了待ち
		nCnt = 0
		Do while true
			Wscript.Sleep 1000

			Set objTarget = objWmi.ExecQuery( strQuery )
			For Each obj in objTarget 
				strResult = obj.State
			Next 

			if strResult = "Stopped" then
				Exit Do
			end if

			nCnt = nCnt + 1
			if nCnt > 60 then
				Exit Do
			end if

		Loop

	end if

Next



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

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

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

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

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


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

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

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

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

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


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