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

1.概要

クライアント環境で保持されている固有情報の取得や特殊フォルダーのパスの取得、ウィンドウを任意の表示モードで整列など WScript.ShellのメソッドとShell.Applicationメソッドの各プロパティによるパラメータを渡して 情報の取得・参照や操作を行います。WScript.Shellのメソッドは、ショートカットの作成やアプリケーションの実行、 レジストリの操作などの機能が提供されています。今回は、上記の機能についてHSPとExcel VBAでサンプルを作成して 比較して行きたいと思います。



2.サンプル

2-1.クライアント環境で保持されている固有情報を取得する
環境変数とは、OSのシェルなどに設定されているシステムの各種情報を保持している文字列変数のことです。 これらの情報は設定や変更、追加が可能です。プログラムから参照するためにクライアントの固有情報として 取得しておくと 利用環境に左右されにくい処理を行なうことが可能となります。 取得方法ですが、 WSHのExpandEnvironmentStringsメソッドを使います。 このメソッドは、PROCESS 環境領域に定義された環境変数のみを展開し、環境変数名を "%" で囲むことによって 値を取得することができます。 また、環境変数名は、大文字と小文字は区別されません。 環境変数%OS%ですが、HSPおよびExcel VBAでもWindows NTと取得されますので、Windows APIなど別の方法で 取得するしかありません。
	;***** 環境変数の取得 *****  
	newcom WshShell, "WScript.Shell"  
	sdim Env,6,512

	Env(0) = WshShell("ExpandEnvironmentStrings","comspec : %COMSPEC%")  
	Env(1) = WshShell("ExpandEnvironmentStrings","SystemRoot : %SystemRoot%")  
	Env(2) = WshShell("ExpandEnvironmentStrings","Path : %PATH%")  
	Env(3) = WshShell("ExpandEnvironmentStrings","Temp : %TEMP%")  
	Env(4) = WshShell("ExpandEnvironmentStrings","WinDir : %WinDir%")  
	Env(5) = WshShell("ExpandEnvironmentStrings","OS : %OS%")  

	;取得内容表示 ( 利用環境によっては取得できないものもあります )  
	font "Meiryo UI",14,0  
	mes "***** 環境変数の取得 *****"  
	repeat 6 
		mes Env(cnt)
 	loop
	delcom WshShell  
	stop
'***** 環境変数の取得 *****
Sub GetEnv()
    Dim wsh  As Object
    Dim Env(6) As String
    Dim i As Integer
    
    Set wsh = CreateObject("Wscript.Shell")
    
    Env(0) = wsh.ExpandEnvironmentStrings("comspec : '%COMSPEC%'")
    Env(1) = wsh.ExpandEnvironmentStrings("SystemRoot : '%SystemRoot%'")
    Env(2) = wsh.ExpandEnvironmentStrings("Path : '%PATH%'")
    Env(3) = wsh.ExpandEnvironmentStrings("Temp : '%TEMP%'")
    Env(4) = wsh.ExpandEnvironmentStrings("WinDir : %WinDir%'")
    Env(5) = wsh.ExpandEnvironmentStrings("OS : '%OS%'")
    
    '***** 表示処理 *****
    For i = 0 To 5
        Cells(i + 1, 1).value = Env(i)
    Next i
	Set wsh = Nothing
End Sub

2-2.スタートメニュー等の特殊フォルダーのパスを取得する
特殊フォルダのフルパスを取得・列挙します。特殊フォルダとは、「スタート メニュー」「送る」「最近使ったファイル」などの 特殊な働きを持ったフォルダのことです。 Win32APIでは、SHGetSpecialFolderLocationで特殊フォルダの ITEMIDLIST(IDL) を取得して、 その IDL を元に SHGetPathFromIDListでパスを取得することができますが、 WSH を利用すれば、非常に簡単に取得することができます。 WScript.ShellオブジェクトのSpecialFoldersプロパティを利用します。 全部で16種類のフルパスを取得できます。取得可能な特殊フォルダは、次のようになります。

SpecialFoldersプロパティで取得できる特殊フォルダ

No.指定フォルダ意 味
1 AllUsersDesktop All Usersのデスクトップ
2 AllUsersStartMenu All Usersのスタート・メニュー
3 AllUsersPrograms All Usersのスタート・メニューの「すべてのプログラム」
4 AllUsersStartup All Usersのスタート・メニューの「スタートアップ」
5 Desktop All Usersのデスクトップ
6 Favorites お気に入り
7 Fonts フォント
8 MyDocuments マイ・ドキュメント
9 NetHood マイ・ネットワーク
10 PrintHood プリンタ
11 Programs スタート・メニューの「すべてのプログラム」
12 Recent 最近使ったファイル
13 SendTo コンテキスト・メニューの「送る」
14 StartMenu スタート・メニュー
15 Startup スタート・メニューの「スタートアップ」
16 Templates ファイルの新規作成のテンプレート

	;***** 特殊フォルダを列挙 *****  
	font "Meiryo UI",14,0  
	sdim sFolder,16 : sdim Folder,260  

	sFolder(0) ="AllUsersDesktop"  
	sFolder(1) ="AllUsersPrograms"  
	sFolder(2) ="AllUsersStartup"  
	sFolder(3) ="Desktop"  
	sFolder(4) ="Favorites"  
	sFolder(5) ="Fonts"  
	sFolder(6) ="MyDocuments"  
	sFolder(7) ="NetHood"  
	sFolder(8) ="PrintHood"  
	sFolder(9) ="Programs"  
	sFolder(10)="Recent"  
	sFolder(11)="SendTo"  
	sFolder(12)="StartMenu"  
	sFolder(13)="Startup"  
	sFolder(14)="Templates"  
	sFolder(15)="AppData"  

	newcom WshShell, "WScript.Shell"  
	objspcfol=WshShell("SpecialFolders")  
	pos 10,10  
	repeat 16  
    	Folder=objspcfol("Item", sFolder(cnt))  
    	if Folder="" : continue  
    	pos ,ginfo(23) : mes Folder  
	loop
	delcom objspcfol  
	delcom WshShell  
	stop  
'***** 特殊フォルダを列挙 *****
Sub Getspfol()
    Dim sFolder As String
    Dim SPFolder(16) As String
    Dim i As Integer

    '***** フォルダ文字列 *****
    SPFolder(0) = "AllUsersDesktop"
    SPFolder(1) = "AllUsersPrograms"
    SPFolder(2) = "AllUsersStartup"
    SPFolder(3) = "Desktop"
    SPFolder(4) = "Favorites"
    SPFolder(5) = "Fonts"
    SPFolder(6) = "MyDocuments"
    SPFolder(7) = "NetHood"
    SPFolder(8) = "PrintHood"
    SPFolder(9) = "Programs"
    SPFolder(10) = "Recent"
    SPFolder(11) = "SendTo"
    SPFolder(12) = "StartMenu"
    SPFolder(13) = "Startup"
    SPFolder(14) = "Templates"
    SPFolder(15) = "AppData"

    '***** 表示処理 *****
    For i = 0 To 15
        Cells(i + 1, 1).Value = GetSpecialFol(SPFolder(i))
    Next i
End Sub

Function GetSpecialFol(ByVal strFolder As String)
    Dim wsh As Object
    Set wsh = CreateObject("Wscript.Shell")

    GetSpecialFol = wsh.SpecialFolders((strFolder))
    Set wsh = Nothing
End Function

2-3.バラバラなウィンドウを任意の表示モードで整列させる
現在、開いているウィンドウの各種整列操作を行ないます。ウィンドウの整列とは、ウィンドウを最小化したり 重ねて表示させたりする 整列操作のことを言います。 VBScriptでは、これらの操作を行なうのに便利な オブジェクトが提供されています。プログラムの実行・環境変数 の操作などを行なうWshShellオブジェクト を利用します。 ウィンドウの整列操作においては、次の5つの動作を行なうことができます。いずれも VBScriptの組み込み定数をパラメータとして 与えるだけで操作ができます。

ウィンドウの整列動作モード定数

No.定数意 味
1 MinimizeAll All 全ウィンドウを最小化
2 UndoMinimizeALL ウィンドウ操作を元にもどす
3 TileVertically ウィンドウを左右に並べて表示
4 TileHorizontally ウィンドウを上下に並べて表示
5 CascadeWindows ウィンドウを重ねて表示

	;***** ウィンドウの整列 *****  
	gsel 0,-1  
	newcom ShellApp, "Shell.Application"  
	ShellApp->"MinimizeAll"  
	wait 100  
	ShellApp->"UndoMinimizeALL"  
	wait 50  
	ShellApp->"CascadeWindows"  
	delcom ShellApp  
	end
'***** ウィンドウの整列 *****
Sub winmode()
    Dim wsh, ShellApp As Object

    Set ShellApp = CreateObject("Shell.Application")
    
    ShellApp.MinimizeAll
    '5000ミリ秒(5秒)待機
    Sleep 5000
    ShellApp.UndoMinimizeALL
    '1000ミリ秒(1秒)待機
    Sleep 1000
    ShellApp.CascadeWindows
    '2000ミリ秒(2秒)待機
    Sleep 2000
    MsgBox "終了しました。"
    Set ShellApp = Nothing
End Sub
Public Declare PtrSafe Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)

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

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

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

コメント

このブログの人気の投稿

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

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

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

TOP