
taka



最新記事 by taka (全て見る)
- 『雑記』最近の私の話~ - 2019年9月26日
- 【動画】自作パソコン構成変更!ケースをNZXT H500に交換しました! - 2019年6月5日
- VBA 『Array関数』指定した要素で配列を作成する - 2019年5月23日
- 「動画」初完全ワイヤレスイヤホン『Jabra Elite Active 65t』 - 2019年5月17日
- VBA 日付で令和を簡単に判定してみよう - 2019年5月7日
VBAでCPUの情報を取得する【WMI 】
takaです、今回はVBAでCPUの情報を確認できないかといろいろ調べてみたところ何とか成功しましたのでご紹介します!
はっきり言ってタスクマネージャーがある以上、VBAでこの作業をするメリットはほぼないと思います。ですが!ExcelVBAでこういう事も出来るんだという事を知っていただければ私としては十分です!
暇つぶしにでもご覧ください( ^^) _旦~~
【WMI】とは何か?
まず【VBA CPU取得】で検索すると【WMI】という単語が多々出てきます、【WMI】、聞きなれない言葉が出てきましたね( ;∀;)
私自身も今回はじめて目にしました←
調べてみると、WMIとはWindows Management Instrumentationの略で翻訳すると【ウィンドウズ・管理・計装(測定)】という意味らしいです。詳しくはMicrosoftのトラブルシューティングに記載してありましたので引用させていただきます。
Windows Management Instrumentation (WMI) は、Windows 管理技術の中核を担っています。WMI は、ローカル コンピュータとリモート コンピュータの両方の管理に使用できます。WMI は、プログラミング言語やスクリプト言語で日常的な管理タスクを実行するための一貫したアプローチを提供します。たとえば、次のようなことが可能です。
- リモート コンピュータ上のプロセスを起動できます。
- 特定の日時にプロセスを実行するようにスケジュールを設定できます。
- コンピュータをリモートで再起動できます。
- ローカル コンピュータまたはリモート コンピュータにインストールされているアプリケーションのリストを取得できます。
ローカル コンピュータまたはリモート コンピュータ上の Windows イベント ログを照会できます。
WMI (Windows Management Instrumentation) の Instrumentation という単語は “計器” や “計器による測定” を意味します。ちょうど自動車の計器類がエンジンに関する情報を示すように、WMI はコンピュータ システムの内部状態に関する情報を示します。WMI では、Windows システム内に検出されたディスクやプロセスなどのオブジェクトをモデリングすることにより、”計器情報” を提供します。WMI によるシステム オブジェクトのモデリングには、Win32_LogicalDisk や Win32_Process などのクラスが使用されます。クラス名から推察できるように、Win32_LogicalDisk はコンピュータ上の論理ディスクをモデリングするクラス、Win32_Process はコンピュータ上で現在稼動している任意のプロセスをモデリングするクラスです。クラスは、Common Information Model (CIM) と呼ばれる拡張可能スキーマに基づいています。CIM スキーマは、Distributed Management Task Force ( http://www.dmtf.org) の公開規格です。
WMI には、上記のほか、イベント処理、リモート処理、クエリ処理、ビュー、スキーマのユーザー拡張、情報取得などの機能もあります。
という事で簡単に言うと【PCの状態を詳しく見れる測定器】の役割を担っていると考えていいのかな?と思います( ..)φメモメモ
VBAでCPUの情報を取得する方法
では実際にWMIを使用してVBAからCPUの情報を抜き出してみましょう!
用意するフォーム
今回作成したのはCPUの名前と使用率の取得を目的としたユーザーフォームです。使用率をリアルタイムで取得し、使用率の上限でプログレスバーが稼働します。


用意するコントロール
- Label1~2
- ProgressBar1
コード
今回はWMIの使用方法を紹介している【WMI Fun !!】様のコードを参考にして作成しました。
もし実行時にエラーが発生した場合は、VBEを開き【ツール】→【参照設定】→ Microsoft WMI Scripting V1.2 Library にチェックを入れてから実行してみてください。
Private Sub UserForm_Activate() Dim PrcSet As SWbemObjectSet Dim Prc As SWbemObject Dim Locator As SWbemLocator Dim Service As SWbemServices Do While UserForms.Count > 0 Set Locator = New WbemScripting.SWbemLocator Set Service = Locator.ConnectServer Set PrcSet = Service.ExecQuery _ ("Select * From Win32_Processor") For Each Prc In PrcSet Label1.Caption = Prc.Name Label2.Caption = "cpu使用率" & Prc.LoadPercentage & "%" DoEvents ProgressBar1.Value = Prc.LoadPercentage Next Loop Set PrcSet = Nothing Set Prc = Nothing Set Locator = Nothing Set Service = Nothing End Sub
ダウンロード
当サイトの免責事項をお読みになってからお使いください。
フォロー・チャンネル登録お願いします
VBA以外についてのブログはこちら↓
https://yb-log.com/■Twitterフォロー
Follow @taka_pc1027■YouTubeチャンネル登録
コメントを残す