HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2021
0507
MS_Stackmsinfo32のようにシステム情報を読み取りたい6解決


MS_Stack

リンク

2021/5/7(Fri) 14:45:04|NO.92765

Windowsにmsinfo32というシステム情報を読み取るソフトが付属していますが、同じ内容を
HSPで読み取ることは可能でしょうか?(個人的にmsinfo32が読み取った情報をHSPを使って
表示したいということです。ユーザーに実行させるのではなくフラグなどで自動的に読み取り
書き出しを行いたいです。)
もし、不可能であれば、プロセッサーなど、個々に読み取る方法を教えてください。
知りたいのは、「GPU名、ストレージ容量、ストレージの種類、ドライバー一覧」です。
わがままな質問ですがよろしくお願いします。



この記事に返信する


TOMATO

リンク

2021/5/7(Fri) 14:54:31|NO.92768

msinfo32の内部実装はWMI(Windows Management Instrumentation)なので、
それを使えば同じ情報が取れると思います。

https://blog.goo.ne.jp/hiro239415/e/b0fb4ec697b8dbb34645f9600f4fac9a



TOMATO

リンク

2021/5/7(Fri) 14:57:22|NO.92769

HSPではないですが、WMIを使って取得できる情報がまとまっています。
http://www.wmifun.net/sample/



MS_Stack

リンク

2021/5/7(Fri) 15:50:07|NO.92772

返信ありがとうございます。ですが、自分はまたWMIについてあまり理解しておらず、
どのように使えばいいのか、またどのようにHSPに移植すればいいのかがわかりません。
サンプルコードは拝見させていただきましたが、そのコードを使ってどのようなことを
すればいいのか教えていただけないでしょうか。サイトにも書いてあったのをみましたが、
どのようにすればいいのかさっぱりです。



TOMATO

リンク

2021/5/7(Fri) 18:22:42|NO.92773

サンプルとして、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



MS_Stack

リンク

2021/5/7(Fri) 18:58:55|NO.92774

なるほど、そのように移植するのですね。HSPへ移植する方法とかまだ知らず、
関数などについてもまだ未熟なので、サンプルはありがたいです。
おおまかに読み取る場合は、HSP用の通常のコードで、より詳しく知りたい場合は、
VBSのソースをHSPに移植してプログラムを組みたいと思います。
ありがとうございました。



Hiro

リンク

2021/5/8(Sat) 00:44:40|NO.92782

別の方法として、
msinfo32のヘルプを一部引用。

構文 : msinfo32 [/?] [/pch] [/nfoパス] [/reportパス] [/computer会社名] [/showcategories] [/categoryカテゴリ ID] [/categoriesカテゴリ ID] パラメータ
HSPのソースで下記を実行。、

exec "msinfo32 /report d:\msinfo32.txt"
msinfo32.txtを、
パースして目的のデータを取得するのはどうでしょうか。



ONION software Copyright 1997-2023(c) All rights reserved.