2020年1月22日水曜日

VS バッテリ絡みのアレコレ

以前から気になっていたのですが ... 。
OS の 仕組みって、とても、複雑です。
例えば、 便利な ノート PC の バッテリ 絡みの 管理情報。
powercfg /batteryreport で提供されている情報ですが ... 。


私も、ノート PC 使ってます。  かなり、古くなっていますが ... 。  ;)
使い込むと頭痛の種になるのが ... バッテリ!。

バッテリは なまもの!。
最初は イキイキしていますが、
月日と共に劣化が進行し、
騙し騙しの日々がやって来ます。
そして、はい、 そろそろ、寿命か ... 。

そんな時の 駄目押し ... 、引導を渡すのが、先に書いた ...
powercfg /batteryreport 。

こりゃぁ~、もう、危ない! と分かる数値の羅列とご対面!。 X(


イントロはそろそろ切り上げて ... 。

powercfg は便利ですが、
.html や .xml で出力されるものは詳細で有効かつ強力ですが、
ちょっと、作業が何ステップか必要な為、
作業が億劫なのですね。

では、自分で書くか と思えば、直ぐに挫折 ... 。
思った程の詳細情報が得られません。

そこで、Internet を漁り捲って、 他人さまのお書きになったツールを導入しました。
はい。  Yuryu's Battery Information YbInfo です。
Home Page を検索しましたが、不明 ... 。
Yuryu さま! ありがとう!。
尚、
CPUID の HWMonitor でも、主要な数値は取得出来ます。
https://www.cpuid.com/softwares/hwmonitor.html  CLASSIC VERSIONS から Free Edition を。.
こちらも、 ありがとう!。


さて、本題に戻りましょう。
そうです。
これ バッテリ絡み は、複雑なカラクリに囲まれています。


こんな事が絡むのです。

言い方は変ですが、実は、 powercfg は単純に動いる訳では無くて、
様々な API 等から結果を参照していて、それらは ネイティブコードらしい と言う事。
どうやら、energy.dll がそれらを束ねている模様 ... 。
フロントエンド的な役目なので、
個々のデータ参照は、そんなに楽ではなさそう ... と思っています。
実際に、WMI から取得すれば、完全では無い形でしか得られませんから。
powercfg から、出て来る Output を加工するのも、後戻りっぽいので、スッキリしませんし。
結局、powercfg が内部でしているのと同様に、API を叩かなければ、各項目は得られない筈です。

 参考: https://tutorialmore.com/questions-158294.htm

簡単に済まそうと思い、 powercfg /batteryreport を念頭に、
VB or C# で Project を組めば、
cmd.exe を Process として呼ぶ事になりますが、
x64 OS の場合、cmd.exe はふたつあります。
\SysWOW64\cmd.exe と \System32\cmd.exe と。
AnyCPU Prefer32 (x86 32-Process) は前者、 AnyCPU Not Prefer32 or x64 は後者。です。
各々の Command Prompt からは set PROCESSOR_ARCHITECTURE で確認出来ます。
x64 は AMD64 が、 x86 は x86 が返ります。
この辺りが絡んで、 ネイティブであろう  energy.dll がコケるケース にも注意が必要でしょう。

msdn で以下の様に書き込みをしました。

  energy.dll で検索すると、OS CPU アーキテクチャに依存する様ですので、
  OS が x64 の場合、Project が 32 優先になっていると、エラーを吐く気がします。
  AnyCPU 優先なし または x64 にして Build したら改善されますか?。


いやぁ、 バッテリ絡み は難しい ... 。



0 件のコメント:

コメントを投稿