macOS中的电池状态API?

33

我如何从自己的应用程序中读取 MacBookPro 电池的状态?

通过谷歌搜索目前只能找到设备驱动程序处理电源事件的 API,没有关于用户空间进程访问这些信息的内容。

谢谢。

5个回答

78

如果你想通过命令行快速查询电池状态,你会发现pmset命令很有帮助。要查询电池状态,请使用以下命令:

$ pmset -g batt

2
当通过SSH远程使用您的Mac时,这尤其有用。如果您需要短跑到它上面连接AC,了解这一点很好! - ScrollerBlaster
5
很好奇这个问题为什么会得到这么多赞,因为它明确是我正在寻找的 API 调用(根据我接受的答案)。 - Alnitak
4
可能是因为问题标题/标签没有区分脚本/CLI和编译上下文,所以许多人(包括我自己)发现一个可以轻松解决的答案比需要我进入特定编译语言的答案更有用。 - xander

27
您需要使用IOKit来完成这个任务,特别是使用IOPowerSources函数。您可以使用IOPSCopyPowerSourcesInfo()获取一个数据块,然后使用IOPSCopyPowerSourcesList()从中提取CFArray列表,列出所有电源信息。接下来,使用IOPSGetPowerSourceDescription()提取字典(请查看IOPSKeys.h了解字典内容)。

任何代码示例都将不胜感激:) - Alexander Dyagilev

0

或许可以将提取的文本放入脚本应用程序中

pmset -g batt | head -n 1 | cut -c19- | rev | cut -c 2- | rev

输出

Battery Power
AC Power

-2
对于Objective-C,使用以下代码可以获取当前百分比:
NSPipe *pipe = [NSPipe pipe];
NSFileHandle *file = pipe.fileHandleForReading;
NSTask *task = [[NSTask alloc] init];
task.launchPath = @"/usr/bin/pmset -g batt |  perl -ne ' print \"$1\n\" if /([0-9]+%)/'";
NSPipe *pipe = [NSPipe pipe];
task.standardOutput = pipe;
[task launch];
NSData *data = [pipe availableData];

-3

看看系统管理控制器。我手头没有我的MBP,但我相信你需要查看smc.h


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接