jjzjj

windows - 记录电源/电池事件

coder 2024-06-13 原文

刚买了一个 APC 备用电池并将 USB 数据线连接到我的 Windows 7 电脑上。它自动安装了一个驱动程序,现在在 Windows 托盘中我看到一个带有电源插头图标的电池,它显示了充电百分比。当我从墙上拔下 UPS 时,台式机进入电池模式并且小图标发生变化……就像笔记本电脑一样。

我想做的是在此事件发生时运行一个任务。不幸的是,电源状态的变化不会在事件查看器中记录事件,因此我可以将任务附加到它。显然有什么事情正在发生,因为图标在变化。当电源状态更改为电池时,如何记录事件?

谢谢, 广告

最佳答案

执行此操作的一种方法是使用 WMI 通知一直运行的脚本。下面是一个脚本,用于监视 Win32_Battery WMI 类中对象的更改并报告所做的更改:

strComputer = "."

' Connect to WMI
Set objWMIService = GetObject("winmgmts:" _
    & "{impersonationLevel=impersonate}!\\" & strComputer & "\root\cimv2")

'Create the Sink object used for the asynchronous notification.
Set objSink = WScript.CreateObject("WbemScripting.SWbemSink","SINK_")

' Send the query asynchronously.  The SINK_OnObjectReady subroutine will be
' called if any data comes in.
objWMIService.ExecNotificationQueryAsync objSink, "SELECT * FROM __InstanceModificationEvent WITHIN 1 WHERE " _
    & "TargetInstance ISA 'Win32_Battery'"

while 1
    Wscript.Sleep(1000)
Wend

Sub SINK_OnCompleted(iHResult, objErrorObject, objAsyncContext)
    WScript.Echo "Asynchronous operation is done."
End Sub

Dim intLastLevel
intLastLevel = 0

Sub SINK_OnObjectReady(objObject, objAsyncContext)
    ' This runs whenever a change is made to the Win32_Battery object for 
    ' your computer's battery.  For more useful properties of this class, 
    ' see: http://msdn.microsoft.com/en-us/library/aa394074(v=vs.85).aspx
    Set objEvent=objObject.TargetInstance

    Select Case objEvent.BatteryStatus
        Case 1
            if intLastLevel <> objEvent.EstimatedChargeRemaining Then
                Wscript.Echo "Battery is discharging."
                Wscript.Echo "Battery has", objEvent.EstimatedChargeRemaining + 1, "% left on battery."
                Wscript.Echo "Battery has", objEvent.EstimatedRunTime, " minutes left on battery."
                intLastLevel = objEvent.EstimatedChargeRemaining
            End If
        Case 2
            Wscript.Echo "Battery is connected to AC."
        Case 3
            Wscript.Echo "Battery is fully charged."
        Case 4
            Wscript.Echo "Battery is currently low."
        Case 5
            Wscript.Echo "Battery is currently critically low."
        Case 6
            Wscript.Echo "Battery is currrently charging."
            Wscript.Echo "Battery has", objEvent.BatteryRechargeTime, "minutes until it is fully charged."
        Case 7
            Wscript.Echo "Battery is currrently charging and has high charge."
            Wscript.Echo "Battery has", objEvent.BatteryRechargeTime, "minutes until it is fully charged."
        Case 8
            Wscript.Echo "Battery is currrently charging and has low charge."
            Wscript.Echo "Battery has", objEvent.BatteryRechargeTime, "minutes until it is fully charged."
        Case 9
            Wscript.Echo "Battery is currrently charging and has critically low charge."
            Wscript.Echo "Battery has", objEvent.BatteryRechargeTime, "minutes until it is fully charged."
        Case 10
            Wscript.Echo "Battery doesn't know what's going on."
        Case 11
            Wscript.Echo "Battery is partially charged."
    End Select

End Sub

希望这对您有所帮助,如果您有任何问题,请给我留言。

关于windows - 记录电源/电池事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18514076/

有关windows - 记录电源/电池事件的更多相关文章

  1. ruby - 在 Ruby 程序执行时阻止 Windows 7 PC 进入休眠状态 - 2

    我需要在客户计算机上运行Ruby应用程序。通常需要几天才能完成(复制大备份文件)。问题是如果启用sleep,它会中断应用程序。否则,计算机将持续运行数周,直到我下次访问为止。有什么方法可以防止执行期间休眠并让Windows在执行后休眠吗?欢迎任何疯狂的想法;-) 最佳答案 Here建议使用SetThreadExecutionStateWinAPI函数,使应用程序能够通知系统它正在使用中,从而防止系统在应用程序运行时进入休眠状态或关闭显示。像这样的东西:require'Win32API'ES_AWAYMODE_REQUIRED=0x0

  2. ruby - Sinatra:运行 rspec 测试时记录噪音 - 2

    Sinatra新手;我正在运行一些rspec测试,但在日志中收到了一堆不需要的噪音。如何消除日志中过多的噪音?我仔细检查了环境是否设置为:test,这意味着记录器级别应设置为WARN而不是DEBUG。spec_helper:require"./app"require"sinatra"require"rspec"require"rack/test"require"database_cleaner"require"factory_girl"set:environment,:testFactoryGirl.definition_file_paths=%w{./factories./test/

  3. ruby-on-rails - Rails 5 Active Record 记录无效错误 - 2

    我有两个Rails模型,即Invoice和Invoice_details。一个Invoice_details属于Invoice,一个Invoice有多个Invoice_details。我无法使用accepts_nested_attributes_forinInvoice通过Invoice模型保存Invoice_details。我收到以下错误:(0.2ms)BEGIN(0.2ms)ROLLBACKCompleted422UnprocessableEntityin25ms(ActiveRecord:4.0ms)ActiveRecord::RecordInvalid(Validationfa

  4. ruby - 在 Windows 机器上使用 Ruby 进行开发是否会适得其反? - 2

    这似乎非常适得其反,因为太多的gem会在window上破裂。我一直在处理很多mysql和ruby​​-mysqlgem问题(gem本身发生段错误,一个名为UnixSocket的类显然在Windows机器上不能正常工作,等等)。我只是在浪费时间吗?我应该转向不同的脚本语言吗? 最佳答案 我在Windows上使用Ruby的经验很少,但是当我开始使用Ruby时,我是在Windows上,我的总体印象是它不是Windows原生系统。因此,在主要使用Windows多年之后,开始使用Ruby促使我切换回原来的系统Unix,这次是Linux。Rub

  5. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

    是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

  6. Vscode+Cmake配置并运行opencv环境(Windows和Ubuntu大同小异) - 2

    之前在培训新生的时候,windows环境下配置opencv环境一直教的都是网上主流的vsstudio配置属性表,但是这个似乎对新生来说难度略高(虽然个人觉得完全是他们自己的问题),加之暑假之后对cmake实在是爱不释手,且这样配置确实十分简单(其实都不需要配置),故斗胆妄言vscode下配置CV之法。其实极为简单,图比较多所以很长。如果你看此文还配不好,你应该思考一下是不是自己的问题。闲话少说,直接开始。0.CMkae简介有的人到大二了都不知道cmake是什么,我不说是谁。CMake是一个开源免费并且跨平台的构建工具,可以用简单的语句来描述所有平台的编译过程。它能够根据当前所在平台输出对应的m

  7. 深度学习部署:Windows安装pycocotools报错解决方法 - 2

    深度学习部署:Windows安装pycocotools报错解决方法1.pycocotools库的简介2.pycocotools安装的坑3.解决办法更多Ai资讯:公主号AiCharm本系列是作者在跑一些深度学习实例时,遇到的各种各样的问题及解决办法,希望能够帮助到大家。ERROR:Commanderroredoutwithexitstatus1:'D:\Anaconda3\python.exe'-u-c'importsys,setuptools,tokenize;sys.argv[0]='"'"'C:\\Users\\46653\\AppData\\Local\\Temp\\pip-instal

  8. ruby-on-rails - 事件记录 : Select max of limit - 2

    我正在尝试将以下SQL查询转换为ActiveRecord,它正在融化我的大脑。deletefromtablewhereid有什么想法吗?我想做的是限制表中的行数。所以,我想删除少于最近10个条目的所有内容。编辑:通过结合以下几个答案找到了解决方案。Temperature.where('id这给我留下了最新的10个条目。 最佳答案 从您的SQL来看,您似乎想要从表中删除前10条记录。我相信到目前为止的大多数答案都会如此。这里有两个额外的选择:基于MurifoX的版本:Table.where(:id=>Table.order(:id).

  9. Ruby 守护进程导致 ActiveRecord 记录器 IOError - 2

    我目前正在用Ruby编写一个项目,它使用ActiveRecordgem进行数据库交互,我正在尝试使用ActiveRecord::Base.logger记录所有数据库事件具有以下代码的属性ActiveRecord::Base.logger=Logger.new(File.open('logs/database.log','a'))这适用于迁移等(出于某种原因似乎需要启用日志记录,因为它在禁用时会出现NilClass错误)但是当我尝试运行包含调用ActiveRecord对象的线程守护程序的项目时脚本失败并出现以下错误/System/Library/Frameworks/Ruby.frame

  10. ruby-on-rails - 在 Rails 中更高效地查找或创建多条记录 - 2

    我有一个应用需要发送用户事件邀请。当用户邀请friend(用户)参加事件时,如果尚不存在将用户连接到该事件的新记录,则会创建该记录。我的模型由用户、事件和events_user组成。classEventdefinvite(user_id,*args)user_id.eachdo|u|e=EventsUser.find_or_create_by_event_id_and_user_id(self.id,u)e.save!endendend用法Event.first.invite([1,2,3])我不认为以上是完成我的任务的最有效方法。我设想了一种方法,例如Model.find_or_cr

随机推荐