HSPとExcel VBAで情報取得 (その3)

1.概要

HSP3やExcel VBAによるCOMオブジェクトの活用事例としての第三弾です。 今回は、前回記事に引き続き、日付と時刻やタスクバーのプロパティを表示させます。 また、FileSystemObjectによるファイルやドライブの詳細情報の取得についても取り上げて見ます。 FileSystemObjectはメソッドやパラメータが豊富でファイル操作に係わることはたいていのことはできますが、 HSPやExcel自体もファイル操作命令や関数が備わっているため、実際の実装については、実用面からHSPやExcel標準の関数等 を利用した方が良いと思います。


2.サンプル

2-1.日付と時刻のプロパティを表示させる
タスクトレイにある時計の日付と時刻の調整から起動される日付と時刻のプロパティをプ ログラム上から表示します。 WSHでは、シェルのSetTimeメソッドという便利なもが提供さ れています。 HSPでは、 newcom命令でShellApp変数とWshShell変数を COMオブジェクト型として初期化したのち、シェルのSetTime メソッドで日付と時刻のプロ パティを表示起動させます。
	;***** 日付と時刻のプロパティを表示 *****
	newcom ShellApp, "Shell.Application"
	newcom WshShell, "WScript.Shell"

	;▼日付と時刻のプロパティ
	ShellApp->"SetTime"
	wait 100
	ret = WshShell("AppActivate", "日付と時刻")

	delcom WshShell
	delcom ShellApp
	stop
'***** 日付と時刻のプロパティを表示 *****
Sub TimeDateprop()
    Dim wsh, ShellApp As Object
    
    Set wsh = CreateObject("Wscript.Shell")
    Set ShellApp = CreateObject("Shell.Application")

    ShellApp.SetTime
    Sleep 100
    wsh.AppActivate ("日付と時刻")

    Set ShellApp = Nothing
    Set wsh = Nothing
End Sub
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

2-2.タスクバーのプロパティを表示する
スタートメニューの設定から起動するタスクバーとスタートメニューのプロパティを表示 します。WSHでは、シェルの TrayPropertiesメソッドという便利なもが提供されています。 HSPでは、 newcom命令でShellApp変数とWshShell変数を COMオブジェクト型として初期化したのち、 シェルのTrayPropertiesメソッドでタスクバー のプロパティをを表示起動させます。
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
	;***** タスクバーのプロパティ表示  *****
	newcom ShellApp, "Shell.Application"
	newcom WshShell, "WScript.Shell"

	;タスクバーのプロパティ
	ShellApp->"TrayProperties"
	wait 100
	ret=WshShell("AppActivate", "タスク バー")

	delcom WshShell
	delcom ShellApp
	stop
'***** タスクバーのプロパティ表示 *****
Sub taskbarprop()
    Dim wsh, ShellApp As Object
    
    Set wsh = CreateObject("Wscript.Shell")
    Set ShellApp = CreateObject("Shell.Application")

    ShellApp.TrayProperties
    Sleep 100
    wsh.AppActivate ("タスク バー")
   
    Set ShellApp = Nothing
    Set wsh = Nothing
End Sub

2-3.ファイルの情報を取得する
ファイルのフルパス名や拡張子といった情報を取得します。HSPの標準関数には、getpath 関数というのがあり、 getpath関数機能のWSH版です。 ファイルの情報を取得するには、 Scripting.FileSystemObjectを使います。 HSPでは、newcom命令でobjFS変数をCOMオブジェクト型と して初期化したのち、 FileExistsメソッドと任意に指定したファイル名を引数として、フ ァイルの存在を確認するため、 objexFileオブジェクト 変数に代入しています。対象ファ イルの存在が確認できたなら、ファイル情報を取得するメソッドにファイル名を 引数とし て与えて、情報を取得します。利用するメソッドは、次の通りです。

ファイル情報取得メソッド

取得する情報メソッド
 ファイル名 GetFileName
 フルパス GetAbsolutePathName
 親フォルダ名 GetParentFolderName
 ドライブ名 GetDriveName
 拡張子 GetExtensionName
 拡張子を除いた名前 GetBaseName

	;***** ファイル情報の取得 *****
	onexit *owari
	newcom objFS, "Scripting.FileSystemObject"
	sdim sFile,260,10

	;ファイルの指定
	dialog "",16 : if stat==0 : stop

	;ファイル存在の確認  (objexFile=0 : なし,objexFile=-1 : あり)
	objexFile=objFS("FileExists", refstr)
	if objexFile==0 {
		dialog "ファイルは存在しません。 結果="+objexFile
		stop
	}
	;ファイル情報の取得
	comres sFile(0) : objFS->"GetFileName" refstr
	comres sFile(1) : objFS->"GetAbsolutePathName" refstr
	comres sFile(2) : objFS->"GetParentFolderName" refstr
	comres sFile(3) : objFS->"GetDriveName" refstr
	comres sFile(4) : objFS->"GetExtensionName" refstr
	comres sFile(5) : objFS->"GetBaseName" refstr

	;ファイル情報の表示
	pos 10,10
	font "Meiryo UI",14 : objmode 2
	mes "ファイル名 : "+sFile(0)
	mes "フルパス : "+sFile(1)
	mes "親フォルダ名 : "+sFile(2)
	mes "ドライブ名 : "+sFile(3)
	mes "拡張子 : "+sFile(4)
	mes "拡張子を除いた名前 : "+sFile(5)
	mes " "
	mes "処理が終了しました。"
	stop

*owari
	;COMオブジェクト型で、有効なCOMオブジェクトを保持しているか
	if vartype(objFS)==6 {
		if varuse(objFS)==1 : delcom objFS
	}
	end
Sub GeteEasyFileInfo()
    '***** ファイル情報の取得 *****
    Dim objFS As Object
    Dim i  As Integer
    Dim SelFile As Variant
    Dim att As String
    
    Set objFS = CreateObject("Scripting.FileSystemObject")
    
    '***** ファイル選択 *****
    SelFile = Application.GetOpenFilename("ファイル(*.*),*.*")
    If VarType(SelFile) = vbBoolean Then
       MsgBox "キャンセルされました"
       Exit Sub
    End If

    '***** 表示処理 *****
    Cells(1, 1).Value = "ファイル名         : " & objFS.GetFileName(SelFile)
    Cells(2, 1).Value = "フルパス           : " & objFS.GetAbsolutePathName(SelFile)
    Cells(3, 1).Value = "親フォルダ名       : " & objFS.GetParentFolderName(SelFile)
    Cells(4, 1).Value = "ドライブ名         : " & objFS.GetDriveName(SelFile)
    Cells(5, 1).Value = "拡張子             : " & objFS.GetExtensionName(SelFile)
    Cells(6, 1).Value = "拡張子を除いた名前 : " & objFS.GetBaseName(SelFile)

    Set objFS = Nothing
End Sub

3.ソースコードについて

掲載ソースコードのライセンスは、CC0 (クレジット表示不要、改変可、商用可) とします。自由に利用して頂いてかまいません。 尚、データの取得やプログラム実行において損害等が生じた場合は、筆者は一切の責任も負いません。全て自己責任でお願いします。

■関連記事
・HSPとExcel VBAで情報取得 (COMオブジェクトの活用)
・HSPとExcel VBAで情報取得 (その1)
・HSPとExcel VBAで情報取得 (その2)
・HSPとExcel VBAで情報取得 (その4)

コメント

このブログの人気の投稿

Excelアドインで日本語形態素解析

階層構造JSONファイルの作成

HSPでコマンドプロンプトを制御する

TOP