.NET(C#):关于获取系统电池状态

 

返回目录

1. 使用Windows Form的PowerStatus

优点.NET原生态
缺点没有事件通知

第一种最原生态的方法是使用Windows Forms中的SystemInformation类型的PowerStatus属性,返回一个PowerStatus类型的对象。

image

可以通过BatteryChargeStatus属性来获得电池状态,同时Power类型还包含其他属性比如BatteryLifePercent能够获取详细的电量信息。不过使用这种方法唯一的缺点是没有任何电池状态改变的事件通知机制,也就是说需要开发者主动去调用。

 

返回目录

2. 使用WMI

优点有不太完美事件通知能力,不需要引用Windows Form框架。
缺点事件通知效率不高,需要引用System.Management.dll。

另一个方法就是WMI,去查询Win32_Battery类型的Battery_Status属性。类似下面的WQL语句:

SELECT BatteryStatus FROM Win32_Battery

当然,如果就是这样的话, 那么和第一种方法没什么区别。

因此我们可以使用WMI的事件查询,这样当电池状态发生变化后,我们可以第一时间得到信息。

 

针对WMI,这里就不讲理论内容了,读者可以参考网络或者我博客的其他WMI文章。我们这里直接上代码,通过“__InstanceModificationEvent”这个WMI事件类型来指定对象修改后的事件通知,然后查询Win32_Battery类型的属性,代码:

//注意:引用System.Management.dll 和 using System.Management;

static void Main(string[] args)

{

    //创建WQL事件查询,用于实例创建

    var qCreate = new WqlEventQuery("__InstanceModificationEvent",

        TimeSpan.FromSeconds(3),  //WHTHIN = 1

        "TargetInstance ISA 'Win32_Battery'");

 

    //创建事件查询的侦听器(ManagementEventWatcher)

    var wCreate = new ManagementEventWatcher(qCreate);

 

    //事件注册代码

    wCreate.EventArrived += (sender, e) =>

    {

        Console.WriteLine("运行:{0}", GetInfo(e.NewEvent));

    };

 

    //异步开始侦听

    wCreate.Start();

 

    Console.WriteLine("按任意键停止监控");

    System.Threading.Thread.Sleep(-1);

}

 

//输出事件对应的ManagementBaseObject(本例中的Win32_Battery实例)的信息

static int GetInfo(ManagementBaseObject mobj)

{

    var instance = (ManagementBaseObject)mobj["TargetInstance"];

    var prop = instance.Properties["BatteryStatus"];

    return (ushort)prop.Value;

}

 

程序会直接输出BatteryStatus的状态码,具体指的意义可以参考MSDN关于Win32_Battery WMI类型的文档。运行效果如下:

image

(上面程序运行时会出现连续输出同一个值的情况,可能是Win32_Battery的其他属性发生变化。因为WMI事件查询InstanceModificationEvent是针对一个类型的,而我们只输出其中的BatteryStatus属性)

 

但是貌似Win32_Battery类型不是原生态的WMI事件类型(参考这篇文章:http://blogs.msdn.com/b/wmi/archive/2009/12/28/using-within-in-a-wmi-event-query.aspx)。那么实际上事件的通知是根据WQL事件查询中的WITHIN时间值来完成的。显然WITHIN越高,准确度越高,但是更消耗资源。那么,这种事件通知不完美。

 

返回目录

3. 使用Windows Vista新增的本地API

优点具备事件通知能力
缺点要求Windows Vista版本以上的系统,需要调用本地API或者引用Windows API Code Pack

最后一种方法从功能上讲是最完美的,当然代价是要求Windows Vista版本以上的系统,需要调用本地API或者引用Windows API Code Pack。因为从Windows Vista开始,Windows提供相关类型的API来通知用户电源状态的变化。

 

这里我们就通过引用Windows API Code Pack来轻松使用C#完成上述需求。在Microsoft.WindowsAPICodePack.ApplicationServices命名空间内,使用PowerManager类型可以完成需求,PowerManager类型的成员如下:

image

使用BatteryLifePercentChanged事件就可以知道电池状态变化。通过GetCurrentBatteryState方法来获取具体的电池信息。

当然PowerManager类型还提供其他电源电池相关的功能支持,读者可以自行参考下Windows API Code Pack的文档。


<script type="text/javascript"> </script><script type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js"></script>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
C# 7 and .NET Core: Modern Cross-Platform Development - Second Edition by Mark J. Price English | 24 Mar. 2017 | ASIN: B01N8UG78Q | 594 Pages | AZW3 | 23.26 MB Modern Cross-Platform Development About This Book Build modern, cross-platform applications with .NET Core Get up to speed with C#, and up to date with all the latest features of C# 7 Start creating professional web applications with ASP.NET Core Who This Book Is For This book is targeted towards readers who have some prior programming experience or have a science, technology, engineering, or mathematics (STEM) background, and want to gain a solid foundation with C# and to be introduced to the types of applications they could build and will work cross-platform on Windows, Linux, and macOS. What You Will Learn Build cross-platform applications using C# 7 and .NET Core Explore ASP.NET Core and learn how to create professional web applications Improve your application's performance using multitasking Use Entity Framework Core and find out how to build code-first databases Master object-oriented programming with C# to increase code reuse and efficiency Familiarize yourself with cross-device app development using the Universal Windows Platform and XAML Query and manipulate data using LINQ Protect your data by using encryption and hashing In Detail If you want to build powerful cross-platform applications with C# 7 and .NET Core, then this book is for you. First, we'll run you through the basics of C#, as well as object-oriented programming, before taking a quick tour through the latest features of C# 7 such as tuples, pattern matching, out variables, and so on. After quickly taking you through C# and how .NET works, we'll dive into the .NET Standard 1.6 class libraries, covering topics such as performance, monitoring, debugging, serialization and encryption. The final section will demonstrate the major types of application that you can build and deploy cross-device and cross-platform. In this section, we
### 回答1: ASP.NET C#数据文件网站系统是一种基于ASP.NETC#编程语言的网站系统,它可以通过数据文件来存储和管理网站的数据。这种网站系统可以用于各种类型的网站,包括电子商务网站、社交网站、博客网站等。ASP.NET C#数据文件网站系统具有易于开发、高效、安全等优点,是一种非常流行的网站开发技术。 ### 回答2: ASP.NET是微软公司开发的一种用于Web应用程序开发的框架。它提供了一种完备的Web应用程序开发解决方案来构建动态网站、Web服务和应用程序。ASP.NET使用了不同的语言来编写Web页面和Web服务,其中最常用的语言是C#C#是一种现代化的、强类型的编程语言,由Microsoft开发。它是基于C++和Java语言的,但是它比Java更强大、更灵活。C#语言的设计原则是面向对象技术,它采用了诸如继承、多态、封装和抽象等程序设计技术。 ASP.NETC#可以一起使用,ASP.NET提供了一系列的语言和工具,旨在支持从简单的页面到复杂的企业级应用程序的开发。C#语言和ASP.NET组合的优点在于,开发人员可以利用C#的强大功能和可读性来创建Web应用程序,改善应用程序的可维护性、扩展性与重用性。 ASP.NETC#的组合提供了诸如跨平台、可扩展性、数据存储和处理等强大功能。在此基础上,Web开发人员可以更加轻松地构建可靠、高效、安全和易维护的Web应用程序。ASP.NETC#的结合还常用于开发各种领域的企业及行业应用,如电子商务、社交网络、医疗保健等。 综上所述,ASP.NETC#的组合是一个非常强大的Web应用程序开发工具,可以帮助开发人员快速、灵活地创建高效、可靠和易维护的Web应用程序。 ### 回答3: ASP.NET C#是一种以面向对象编程思想为基础的Web开发框架和编程语言。ASP.NET是微软开发的一种Web应用程序开发平台,可以运行在IIS上,支持多种脚本语言(C#、VB.NET等),而C#作为ASP.NET的主要编程语言之一,可以使开发人员用书写C#代码来构建、测试和部署Web应用程序。 ASP.NET C#最大优势在于其高效性和安全性。C#是一种类型安全的编程语言,支持面向对象编程,通过在代码中使用类,开发人员可以将代码组织成可重用的模块,从而提高了开发效率和代码可维护性。同时,ASP.NET C#也支持高级安全特性,通过对代码和数据进行严格的验证和访问控制,保证了Web应用程序对恶意攻击的防护、隐私、安全和数据完整性等多方面的保护,让Web应用程序更加稳定和可信。 除此之外,ASP.NET C#还具有高度可扩展性,可以实现多种功能和业务模块,例如动态生成HTML页面、响应用户请求、与数据库互动、支持多种数据格式、处理安全问题等。同时,ASP.NET C#也支持多种开发模式,例如MVC、Web Forms、Web API等,以及集成多种第三方软件组件和开发工具,如Visual Studio、Ajax、jQuery、Entity Framework等,从而更好地满足了开发人员的不同需求和业务场景。 总之,ASP.NET C#作为一种高效、安全、可扩展的Web开发框架和编程语言,已经成为企业级Web应用程序开发的重要选择。无论是为了简化开发流程、提高生产力,或是为了提高 Web 应用程序的安全性和用户体验,ASP.NET C# 都是一个可靠的选择。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值