【问题标题】:Need help creating battery alert using visual basic需要帮助使用 Visual Basic 创建电池警报
【发布时间】:2022-01-26 22:39:36
【问题描述】:

我一直在寻找资源、程序和代码,这些资源、程序和代码会在我的笔记本电脑电池充满(或几乎充满)时提醒我拔掉充电器。

没有取得任何成功,直到我看到这个博客 - http://blogs.technet.com/b/jhoward/archive/2013/04/24/get-an-alert-when-my-battery-reaches-95.aspx

这段代码唯一的问题

第 13 行:iRemaining(或从 BatteryStatus 调用的 RemainingCapacity 返回 0(可能是一个浮点数,我不知道为什么)。我什至查看了 microsoft 文档,它应该是一个百分比。

我想获取电池的当前百分比或总的 Fullchargedcapacity 和 EstimatedRemainingCapacity 以找到电池电量的百分比。

基本上我要问的是如何使用 Visual Basic 脚本返回电池电量百分比。

救命!

守则

 1 set oLocator = CreateObject("WbemScripting.SWbemLocator")
 2 set oServices = oLocator.ConnectServer(".","root\wmi")
 3 set oResults = oServices.ExecQuery("select * from batteryfullchargedcapacity")
 4 for each oResult in oResults iFull = oResult.FullChargedCapacity
 5 next
 6 
 7  while (1)
 8     set oResults = oServices.ExecQuery("select * from batterystatus")
 9     for each oResult in oResults
 10      iRemaining = oResult.RemainingCapacity
 12      bCharging = oResult.Charging
 12 next
 13 iPercent = ((iRemaining / iFull) * 100) mod 100
 14 if bCharging and (iPercent > 95) Then msgbox "Battery is at " & iPercent "%",vbInformation,"Battery monitor"
 15 wscript.sleep 30000 ' (30 seconds)
 16 wend 

【问题讨论】:

  • 只是为了让你知道有一种方法可以不用编码。您可以按照此处的步骤进行操作:7tutorials.com/…
  • VBA、basic 和 Visual Basic 是三种独立的语言,互不兼容。还有VB.Net,也是独立的,不兼容的。 Visual C++ 不以任何方式、形状或形式相关(作为 Microsoft 产品除外)。您在此处询问的是什么特定语言?不要只是随机抓取标签 - 添加实际适用于您的问题的标签。
  • @Ken White - 选择标签时只有视觉。我不知道它会解析为 VBA。您的回答也没有任何帮助。 @Mohit 我正在寻找电量不足或严重的电池。
  • 您的脚本“挂起”,因为您没有在 While 语句中设置条件来告诉代码何时退出循环。因此,您的脚本无限循环并消耗 CPU

标签: vbscript


【解决方案1】:

听起来主要问题是您无法判断您的代码是否在执行您想要的操作。如果它运行成功,它将使用一些 CPU(虽然它不应该太多),并且在你的电池充满电之前不会显示任何东西。对于调试,请尝试更改

if bCharging and (iPercent > 95) Then msgbox "Battery is at " & iPercent & "%",vbInformation, "Battery monitor" 

msgbox "Battery is at " & iPercent & "%",vbInformation, "Battery monitor" 

这将让您查看结果,并了解您的代码是否正常工作。

顺便说一句

wscript.sleep 需要以毫秒为单位的时间。因此,您拨打wscript.sleep 30000 只会等待 30 秒,而不是 5 分钟。

【讨论】:

  • 感谢您的意见。所以弹出了错误消息,它基本上意味着除以 0 错误。所以我不确定 RemainingCapacity 是否返回一个实际值。
【解决方案2】:

不,它不是一个百分比。

iPercent = ((iRemaining / iFull) * 100) mod 100 这一行将其更改为百分比。

您提到的文档可能是针对powershell的,您使用的脚本是vbs。

您看到 0 的一个原因可能是您有 2 节电池,而代码只是拉动了第二节电量耗尽的电池。如果是这样,这应该工作>

set oLocator = CreateObject("WbemScripting.SWbemLocator")
set oServices = oLocator.ConnectServer(".","root\wmi")
set oResults = oServices.ExecQuery("select * from batteryfullchargedcapacity")
 
for each oResult in oResults
    iFull = oResult.FullChargedCapacity
next

bCharging = True
while (1 and bCharging)
    set oResults = oServices.ExecQuery("select * from batterystatus")
    totalRemaining = 0
    batteryCount = 0
    for each oResult in oResults
        iRemaining = oResult.RemainingCapacity
        bCharging = oResult.Charging
        totalRemaining = totalRemaining + iRemaining
        batteryCount = batteryCount + 1
    next
    iPercent = Round(((totalRemaining / batteryCount) / iFull) * 100)
    
    if bCharging and (iPercent > 95) Then msgbox "Battery is at " & iPercent & "%",vbInformation, "Battery monitor"
    wscript.sleep 3000000 ' sleep for 5 minutes
wend

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-02-25
    • 2020-03-06
    • 1970-01-01
    • 2019-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多