バッテリー関連の情報を取得するAppleScriptです。
ioregコマンドなどでハードウェア周りの情報を取得する方法は昔から知られており、有益な情報を利用できます。
本ScriptはCocoaの機能も使っておらず、割と古めな構造のものですが、安定して動作しているので使い続けています。
もともと、本Scriptのファイル名は「バッテリ情報を取得.scpt」というものでしたが、「バッテリ情報を取得 v2.scpt」にFinder上でリネームしようとしたら、「ファイル名が長すぎるか、句読点を含まないファイル名に変更してくれ」というエラーをmacOS 10.12および10.13のFinderが出力して、仕方なく英語のファイル名にリネームしました。
# 10.14.6でも10.15.1でも発生しています
macOSのどこのバージョンだかわからないのですが、おそらくファイル名の入力時に001Dのような不可視キャラクタが混入し、Finder上でリネームできなくなるようです。日本語環境でのみ発生する問題と思われます。
AppleScript名:get battery info v2 |
set bInfo to getBatteryInfo() of batteryKit –> {CurrentCapacity:5129, MaxCapacity:5265, DesignCapacity:8460, CycleCount:478} script batteryKit on getBatteryInfo() –ハードウェアの識別文字列を取得 set machineType to do shell script "sysctl -n hw.model" –MacBook Proを検出したら、あるいは結果にMacBookの文字列が入っていなかったら終了 if machineType does not contain "MacBook" then return {CurrentCapacity:0, MaxCapacity:0, DesignCapacity:0} end if –MacBookだけ処理続行 –ハードウェア情報を取得 set batCom to "ioreg -p IOService -n AppleSmartBattery -w 0" set a to do shell script batCom set aList to every paragraph of a set itemCount to 1 set hitF to false repeat with i in aList set j to contents of i if j contains "AppleSmartBattery <class AppleSmartBattery" then set resList to items (itemCount + 2) thru (itemCount + 29) of aList set hitF to true exit repeat end if set itemCount to itemCount + 1 end repeat if hitF = false then return set findAttrList to {"CurrentCapacity", "MaxCapacity", "DesignCapacity", "CycleCount"} set hitList to {} repeat with i in findAttrList set j to string id 34 & contents of i & string id 34 repeat with ii in resList set jj to contents of ii if jj contains j then set the end of hitList to jj exit repeat end if end repeat end repeat –現在のバッテリーの容量を取得 set curCap to parseAfterSpecifiedChar("=", contents of item 1 of hitList) of me set curCap to curCap as number –バッテリーの最大容量を取得 set maxCap to parseAfterSpecifiedChar("=", contents of item 2 of hitList) of me set maxCap to maxCap as number –バッテリーの最大容量を取得 set designCap to parseAfterSpecifiedChar("=", contents of item 3 of hitList) of me set designCap to designCap as number –バッテリーの充放電回数を取得 set cCount to parseAfterSpecifiedChar("=", contents of item 4 of hitList) of me set cCount to cCount as number return {CurrentCapacity:curCap, MaxCapacity:maxCap, DesignCapacity:designCap, CycleCount:cCount} end getBatteryInfo –対象文字列(aData)の中で、aCharの文字以降を取得 on parseAfterSpecifiedChar(aChar, aData) set aPos to offset of aChar in aData set resText to text (aPos + (length of aChar)) thru -1 of aData return resText end parseAfterSpecifiedChar end script |
More from my site
(Visited 180 times, 1 visits today)