サンプルとして、GPUの一覧を取得してみます。
以下のVBScriptサンプルコードをHSP用に置き換えています。
http://www.wmifun.net/sample/win32_videocontroller_b.html
比較できるように、VBScriptのソースコードを★マークでコメントしてあります。
HSPのコードと比較をすれば、なんとなくわかるのではないかと思います。
// WMI - HSPメモ帳
// https://blog.goo.ne.jp/hiro239415/e/b0fb4ec697b8dbb34645f9600f4fac9a
#module WMImodule
#uselib "ole32.dll"
#func CoSetProxyBlanket "CoSetProxyBlanket" comobj,int,int,int,int,int,int,int
#define IID_IWbemLocator "{dc12a687-737f-11cf-884d-00aa004b2e24}"
#define CLSID_WbemLocator "{4590f811-1d3a-11d0-891f-00aa004b2e24}"
#usecom IWbemLocator IID_IWbemLocator CLSID_WbemLocator
#comfunc WbemLoc_ConnectServer 3 wstr,int,int,int,int,int,int,var
#define IID_IWbemServices "{9556dc99-828c-11cf-a37e-00aa003240c7}"
#define CLSID_WbemServices "{D68AF00A-29cb-43fa-8504-ce99a996d9ea}"
#usecom IWbemServices IID_IWbemServices CLSID_WbemServices
#comfunc WbemSvc_ExecQuery 20 wstr,wstr,int,int,var
#define IID_IEnumWbemClassObject "{027947e1-d731-11ce-a357-000000000001}"
#define CLSID_EnumWbemClassObject "{1b1cad8c-2dab-11d2-b604-00104b703efd}"
#usecom IEnumWbemClassObject IID_IEnumWbemClassObject CLSID_EnumWbemClassObject
#comfunc EnumWbem_Reset 3
#comfunc EnumWbem_Next 4 int,int,var,var
#define IID_IWbemClassObject "{dc12a681-737f-11cf-884d-00aa004b2e24}"
#define CLSID_WbemClassObject "{9A653086-174F-11d2-B5F9-00104B703EFD}"
#usecom IWbemClassObject IID_IWbemClassObject IID_IWbemClassObject
#comfunc WbemClsObj_Get 4 wstr,int,var,int,int
#deffunc GetWMIData array data,str query,str type
newcom pLoc, IWbemLocator
if( stat == 0 ){
WbemLoc_ConnectServer pLoc, "root\\cimv2", 0, 0, 0, 0, 0, 0, ppSvc
if( stat == 0 ){
newcom pSvc, IWbemServices, -1, ppSvc
if( stat == 0 ){
CoSetProxyBlanket pSvc,10,0,0,3,3,0,0
if( stat == 0 ){
WbemSvc_ExecQuery pSvc, "WQL", query, 48, 0, ppEnum
if( stat == 0 ){
newcom pEnum, IEnumWbemClassObject, -1, ppEnum
if( stat == 0 ){
dimtype vRet, vartype("variant")
repeat
EnumWbem_Next pEnum, -1, 1, ppclsObj, uReturn
if( uReturn == 0 ) : break
newcom pclsObj, IWbemClassObject, -1, ppclsObj
if( stat == 0 ){
WbemClsObj_Get pclsObj, type, 0, vRet, 0, 0
data(cnt) = vRet("value")
delcom pclsObj
}
loop
delcom pEnum
}
}
}
delcom pSvc
}
}
delcom pLoc
}
return
#global
// 以下サンプル
// http://www.wmifun.net/sample/win32_videocontroller_b.html
// ★はVBS側のソースコードです。法則性がわかるかと思います。
// ★ Set oClassSet = oService.ExecQuery("Select * From Win32_VideoController")
Win32_VideoController = "Select * From Win32_VideoController"
// ★ sMesStr = sMesStr & "コントローラ名: " & oClass.Name & vbCrLf & _
sdim Name, 64
GetWMIData Name, Win32_VideoController, "Name"
// ★ "ドライバ: " & oClass.InstalledDisplayDrivers & vbCrLf & _
sdim InstalledDisplayDrivers, 64
GetWMIData InstalledDisplayDrivers, Win32_VideoController, "InstalledDisplayDrivers"
// ★ "バージョン: " & oClass.DriverVersion & vbCrLf & _
sdim DriverVersion, 64
GetWMIData DriverVersion, Win32_VideoController, "DriverVersion"
// ★ "INF ファイル: " & oClass.InfFilename & vbCrLf & _
sdim InfFilename, 64
GetWMIData InfFilename, Win32_VideoController, "InfFilename"
// ★ "INF ファイルセクション: " & oClass.InfSection & vbCrLf & vbCrLf
sdim InfSection, 64
GetWMIData InfSection, Win32_VideoController, "InfSection"
repeat length(Name)
mes "---" + cnt + "---"
// ★ sMesStr = sMesStr & "コントローラ名: " & oClass.Name & vbCrLf & _
mes "コントローラ名: " + Name(cnt)
// ★ "ドライバ: " & oClass.InstalledDisplayDrivers & vbCrLf & _
mes "ドライバ: " + InstalledDisplayDrivers(cnt)
// ★ "バージョン: " & oClass.DriverVersion & vbCrLf & _
mes "バージョン: " + DriverVersion(cnt)
// ★ "INF ファイル: " & oClass.InfFilename & vbCrLf & _
mes "INF ファイル: " + InfFilename(cnt)
// ★ "INF ファイルセクション: " & oClass.InfSection & vbCrLf & vbCrLf
mes "INF ファイルセクション: " + InfSection(cnt)
loop