Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Windows 7 在批处理文件中检查计算机是否已插入交流电源_Windows 7_Batch File - Fatal编程技术网

Windows 7 在批处理文件中检查计算机是否已插入交流电源

Windows 7 在批处理文件中检查计算机是否已插入交流电源,windows-7,batch-file,Windows 7,Batch File,在windows 7中,我如何检查计算机是否在批处理文件中插入了交流电源,就像linux中的交流电源那样 A 一个C++解决方案。我把这个例子编译成2。我还编写了一个修改过的程序,根据不同的参数返回0(脱机)、1(联机)或255(未知)。我叫它。您可以在批处理文件中使用它,检查其中一个值的退出代码 以下是该工具的-impression-C源代码:) #包括 int main() { 系统电源状态; GetSystemPowerStatus(状态和状态); return status.ACLi

在windows 7中,我如何检查计算机是否在批处理文件中插入了交流电源,就像linux中的交流电源那样

  • A
  • 一个C++解决方案。我把这个例子编译成2。我还编写了一个修改过的程序,根据不同的参数返回0(脱机)、1(联机)或255(未知)。我叫它。您可以在批处理文件中使用它,检查其中一个值的退出代码
以下是该工具的-impression-C源代码:)

#包括
int main()
{
系统电源状态;
GetSystemPowerStatus(状态和状态);
return status.ACLineStatus;
}
希望有帮助


1.

2注意:在Linux上交叉编译,因为我没有Windows。不过,它在葡萄酒中发挥了作用,产量:

$./battery.exe 255% -> 剩余时间未知
有一种直接批处理文件的方式:

WMIC Path Win32_Battery Get BatteryStatus

使用这个和一些
find
/
errorlevel
magic,您应该能够将其转化为一个条件。

以下是我在我们的环境中使用的脚本,运行良好:

set OnAC=false
set cmd=WMIC /NameSpace:\\root\WMI Path BatteryStatus Get PowerOnline
%cmd% | find /i "true" > nul && set OnAC=true
if %OnAC% == true *Do your thing here*
wmic path Win32_Battery Get BatteryStatus | find /v "BatteryStatus" | find "1" >nul 2>&1
if "%errorlevel%" == "0" (echo Do whatever you want if on BATTERY) else (echo Do whatever you want if on AC POWER)
说明:

从wmic命令中,将数字与输出隔离。

尝试在结果中找到数字“1”。如果成功,则表示计算机仅使用电池运行。官方术语是“(1)电池正在放电。”


否则,计算机将插入交流电源。

您确实可以通过以下方式获取电池/AC状态:

wmic path Win32_Battery Get BatteryStatus
但是,评估状态值不仅仅是“是1”与“不是1”

退房:

例如,当交流电源接通时,通常应显示“2”

未知(2)

但是,您也可以获得其他值的集合

我很有信心这些都是指“使用电池”/“不使用交流电”:

其他(1)低(4)临界(5)

这些都表示“使用交流电源”/“不使用电池”:

未知(2)充电(6)充电和高(7)充电和低(8)充电,以及 关键(9)

我强烈猜测这也表明“在AC上”:

充满电(3)

这些似乎不太确定

未定义(10)部分充电(11)

我猜“未定义(10)”的意思是“使用交流电”/“没有电池”。“部分充电(11)”必须表示“电池上”,但对于这个(最后一个,奇数个)枚举来说,“交流是否开启”似乎相当模糊

也不是,通常当机器上没有电池时,返回此消息:

“没有可用的实例。”

总之,出于我的目的,我定义了电池的4种主要“状态”:

  • 放电
  • 充电
  • 满满的
  • 不在场
在Linux上,可以直接从内核查询这些函数

在我的逻辑中,我首先认为
“没有可用的实例。”==不存在
,然后我对状态代码使用以下评估:

DISCHARGING
    Other (1)
    Low (4)
    Critical (5)
CHARGING
    Unknown (2)
    Charging (6)
    Charging and High (7)
    Charging and Low (8)
    Charging and Critical (9)
    Partially Charged (11)
FULL
    Fully Charged (3)
NOT PRESENT
    Undefined (10)
此外,我还需要对“isBatteryPresent”和“isAcPower”进行布尔检查。我依靠我的状态评估,然后认为:

isBatteryPresent = state != NOT PRESENT 
isAcPower = state != DISCHARGING

我最终只是将批处理文件转换成了C程序。@Jake223:(如果可以的话)本月的研究主题:。这真的应该更有意义。是的,批处理文件很糟糕。但我最后一次看到有人用C(实际上是C++)程序替换安装脚本是在AIX5.1上。关于BatteryStatus的数字是什么意思,我们沉默地摇了摇头?刚刚找到它,请参阅上的“BatteryStatus”。我喜欢这样:非常简洁和直截了当的“PowerOnline”不适合我。它也没有列在我的WMIC BatteryStatus帮助中,也没有列在文档中:这是什么版本的windows?或者可能是另一个电池驱动程序?它是Windows7。我不能再检查电池驱动程序了。
The system has access to AC so no battery is being discharged. However, the battery is not necessarily charging.
DISCHARGING
    Other (1)
    Low (4)
    Critical (5)
CHARGING
    Unknown (2)
    Charging (6)
    Charging and High (7)
    Charging and Low (8)
    Charging and Critical (9)
    Partially Charged (11)
FULL
    Fully Charged (3)
NOT PRESENT
    Undefined (10)
isBatteryPresent = state != NOT PRESENT 
isAcPower = state != DISCHARGING