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など別の方法で 取得するしかありません。
特殊フォルダのフルパスを取得・列挙します。特殊フォルダとは、「スタート メニュー」「送る」「最近使ったファイル」などの 特殊な働きを持ったフォルダのことです。 Win32APIでは、SHGetSpecialFolderLocationで特殊フォルダの ITEMIDLIST(IDL) を取得して、 その IDL を元に SHGetPathFromIDListでパスを取得することができますが、 WSH を利用すれば、非常に簡単に取得することができます。 WScript.ShellオブジェクトのSpecialFoldersプロパティを利用します。 全部で16種類のフルパスを取得できます。取得可能な特殊フォルダは、次のようになります。
現在、開いているウィンドウの各種整列操作を行ないます。ウィンドウの整列とは、ウィンドウを最小化したり 重ねて表示させたりする 整列操作のことを言います。 VBScriptでは、これらの操作を行なうのに便利な オブジェクトが提供されています。プログラムの実行・環境変数 の操作などを行なうWshShellオブジェクト を利用します。 ウィンドウの整列操作においては、次の5つの動作を行なうことができます。いずれも VBScriptの組み込み定数をパラメータとして 与えるだけで操作ができます。
3.ソースコードについて 掲載ソースコードのライセンスは、CC0 (クレジット表示不要、改変可、商用可) とします。自由に利用して頂いてかまいません。 尚、データの取得やプログラム実行において損害等が生じた場合は、筆者は一切の責任も負いません。全て自己責任でお願いします。
■関連記事
・HSPとExcel VBAで情報取得 (COMオブジェクトの活用)
・HSPとExcel VBAで情報取得 (その2)
・HSPとExcel VBAで情報取得 (その3)
・HSPとExcel VBAで情報取得 (その4)
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 Sub2-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 Function2-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)
コメント
コメントを投稿