2019年03月01日


VBScript : 30秒後のイベント処理

30と言う秒数は、サンプルです。最もテストしやすい間隔なので使用しています。

' このセクションは、cscript.exe で処理を強制させるものです
str = WScript.FullName
str = Right( str, 11 )
str = Ucase( str )
if str <> "CSCRIPT.EXE" then
	str = WScript.ScriptFullName
	Set WshShell = CreateObject( "WScript.Shell" )
	Call WshShell.Run( "cmd.exe /c cscript.exe """ & str & """ & pause", 3 )
	WScript.Quit
end if

' 現在の日付・時刻を取得
dtBase = Now()
dtTarget = dtBase
' 30秒後の日付・時刻を取得
dtTarget = DateAdd( "s", 30, dtTarget )

' Win32_LocalTime に対して比較する為の値を作成
TargetH = Hour( dtTarget )
TargetM = Minute( dtTarget )
TargetS = Second( dtTarget )

' WMI の処理の為のオブジェクトを取得
Set obj = GetObject("winmgmts:\\.\root\cimv2")
' 該当する時間になればイベント発生
Set objMonitor = obj.ExecNotificationQuery( _
	"select * from __InstanceModificationEvent " & _
	"where TargetInstance isa 'Win32_LocalTime' " & _
	"and TargetInstance.Hour = " & TargetH & " " & _
	"and TargetInstance.Minute = " & TargetM & " " & _
	"and TargetInstance.Second = " & TargetS & " " _
)

Wscript.Echo "イベントを待機しています..."
' 以下の行で処理が停止します
Set objLatestEvent = objMonitor.NextEvent 

' イベントが発生したら、ここ以下が実行される
Wscript.Echo "イベントが発生しました"
Wscript.Echo dtTarget
Wscript.Echo Now()

以下では、イベントに関する解説と、ログオフさせる方法について書かれています

スクリプトセンターのドキュメント

あるプロセスを開始し、そのプロセスが終了した時点でユーザーをログオフさせる





posted by at 2019-03-01 13:39 | WMI | このブログの読者になる | 更新情報をチェックする

2017年04月30日


VBScript : Excel の新しいBookを作成する


' ****************************************
' 新しい Excel の Book を作成する
' ****************************************
Function NewBook( BookPath )

	Dim ExcelApp	' アプリケーション
	Dim ExcelBook	' ブック

	Set ExcelApp = CreateObject("Excel.Application")

	' 警告を出さないようにする
	ExcelApp.DisplayAlerts = False

	' ブック追加
	ExcelApp.Workbooks.Add

	' 追加したブックを取得
	Set ExcelBook = ExcelApp.Workbooks( ExcelApp.Workbooks.Count )

	on error resume next
	' 保存
	' 56 は、Excel 2007 で拡張子 .xls で保存する場合に必要
	if CLng(Left(ExcelApp.Version & "",2 )) > 11 then
		Call ExcelBook.SaveAs( BookPath, 56 )
	else
		Call ExcelBook.SaveAs( BookPath )
	end if
	if Err.Number <> 0 then
		MsgBox( "ERROR:" & Err.Description )
	end if
	on error goto 0

	' Excel をアプリケーションとして終了
	ExcelApp.Quit
	' Excel を VBScript から開放
	Set ExcelApp = Nothing
	' オブジェクト変数を通常変数として初期化
	' ( ExcelApp がローカル変数なので実際は必要ありません )
	ExcelApp = Empty

End Function

関連する Microsoft のドキュメント

XlFileFormat Enumeration [Excel 2007 Developer Reference]

▼ オンラインライブラリでのテストコード
<JOB>
<SCRIPT language="VBScript" src="http://lightbox.on.coocan.jp/webwsh/GetScriptDir.txt"></SCRIPT>
<SCRIPT language="VBScript" src="http://lightbox.on.coocan.jp/webwsh/NewBook.txt"></SCRIPT>

<SCRIPT language=VBScript>
' ************************************
' 処理開始
' ************************************

	NewBook( GetScriptDir() & "\新しいBOOK.xls" )

</SCRIPT>
</JOB>

http://lightbox.on.coocan.jp/webwsh/GetScriptDir.txt
http://lightbox.on.coocan.jp/webwsh/NewBook.txt

関連する記事

VBScript : Excel のバージョン表示



posted by at 2017-04-30 21:29 | ツール関数 | このブログの読者になる | 更新情報をチェックする

2016年03月01日


VBScript を『管理者として実行する』


' Shell.Application を使用する
Set obj = Wscript.CreateObject("Shell.Application")
if Wscript.Arguments.Count = 0 then
	' 引数無しの単純な実行の場合のみ、runas で自分自身を呼び出す
	obj.ShellExecute "wscript.exe", WScript.ScriptFullName & " runas", "", "runas", 1
	Wscript.Quit
end if

' ここが実行された時、管理者権限で実行している事になります

VBScript から利用可能な Shell の機能( Shell.Application )を使って、右クリックメニューにある『管理者として実行』を実行する方法です。

引数なしで実行された場合に、引数をダミーで一つセットして( この場合一つめの runas がそうです )自分自身を呼び出すと言う単純な手法を使用しています。ですから、管理者権限で引数を渡すのは少し面倒になるので、外部ファイルから入力するのがいいと思います。




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

この広告は180日以上新しい記事の投稿がないブログに表示されております。