SSブログ

WSHでDumpBinでDLLヘッダから日付取得 [プログラミング学習]

できた。強引だけど。
ここまで手間をかける必要があったかは微妙なラインではあるけど、ここまで手をかけたからわかったことはある、わな。

コメントと仕様は後日更新。

Option Explicit

Dim strDLLFileName

Const ForReading = 1	'読み込み
Const ForWriting = 2	'書きこみ(上書きモード)
Const ForAppending = 8	'書きこみ(追記モード)

Const DOUBLE_QUOTE = 34
Const SPACE_CODE = 32
Const KEY_DATE = "time date stamp"

strDLLFileName = WScript.Arguments(0)
MsgBox "Debug:" & GetDLLDateInHeader(strDLLFileName)

Private Function GetDLLDateInHeader(strDLLFileName)
	Dim objFSO
	Dim WShell
	Dim objExec
	Dim strResult
	Dim ExecCommand
	Dim strOutputFile
	Dim objInFile
	Dim strDateResult

	Set objFSO = CreateObject("Scripting.FileSystemObject")
	Set WShell = CreateObject("WScript.Shell")
	strDateResult = ""

	If objFSO.FileExists(strDLLFileName) then
		if objFSO.GetExtensionName(strDLLFileName) = "dll" then
			strOutputFile = objFSO.GetParentFolderName(WScript.ScriptFullName) & "\Temp.Txt"
			Set objExec = WShell.Exec("%comspec% /c " & objFSO.GetParentFolderName(WScript.ScriptFullName) & _
				 "\dumpbin.exe /Headers /OUT:" & _
				 strOutputFile & chr(SPACE_CODE) & _
				chr(DOUBLE_QUOTE) & strDLLFileName & chr(DOUBLE_QUOTE))

			Do Until objExec.Status = 1
				WScript.Sleep(100)
			Loop
			Set objInFile = objFSO.OpenTextFile(strOutputFile, ForReading)
			Do Until objInFile.AtEndOfStream = true

				strResult = objInFile.ReadLine
				If Instr(strResult, KEY_DATE) > 0 Then
					strDateResult =  Replace(Mid(strResult,9), KEY_DATE, "")
				End if
			Loop

			objInFile.Close
		End if
	End if

	GetDLLDateInHeader = strDateResult

	Set objExec = Nothing
	Set objFSO = Nothing
	Set objInFile = Nothing

End Function


タグ:VBScript WSH
nice!(0)  コメント(0)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 0

コメントを書く

お名前:[必須]
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0