[发布] 电量监视+自动关机工具

简介:     这是一个主要用于在桌面上显示笔记本电池剩余电量的 windows 程序,同时也具有自动关机功能(自动关机功能我自己尚未实际测试过)。因此第一个功能,监视电池的剩余电量的百分比,这个主要对使用充电电池的笔记本电脑有用,台式机不能获取到电池数据(显示NA),所以对台式机没什么意义。

    这是一个主要用于在桌面上显示笔记本电池剩余电量的 windows 程序,同时也具有自动关机功能(自动关机功能我自己尚未实际测试过)。因此第一个功能,监视电池的剩余电量的百分比,这个主要对使用充电电池的笔记本电脑有用,台式机不能获取到电池数据(显示NA),所以对台式机没什么意义。因此对台式机来说,它仅相当于一个自动关机的应用程序。

    开发语言:C++;开发环境:VS2005;

    该程序的前身来源于几年前我用 C# 开发的类似程序,现在的程序在绘制和效果上基本相同,只是舍弃了 C# 程序对 .net framework 平台的依赖,以及调用 Windows API 时那些不优雅的平台调用(Platform Invoke)代码。

    可以让提示窗口自动依附到当前活动窗口的标题栏(靠右侧),为完成这个功能,我需要知道当前活动窗口,并且随着它移动而移动。效果如下图所示。

 

    

 

    放大到 400% 后的显示效果(左侧小图标表示交流电源在线)如下,可见文本被进度割裂成两部分,其前景和背景色为交替状态:

 

    

 

    【注意:如果程序被 360 木马防火墙拦截】

    为了完成依附到窗口标题栏的功能,我安装了一个全局的 CBT Hook (功能位于 CBT.dll ),用于获知系统中的窗口被激活,窗口被移动,最大最小化,关闭等事件。由于用了 SetWindowsHookEx 等敏感的 API 函数,因此可能会如 360 木马防火墙拦截。如果你安装了 360 系列工具,请在运行之前,在360木马防火墙中把程序的 PowerMon.EXE 和 CBT.DLL 文件加入信任列表,或者在防护状态中关闭系统防御中的“文件系统防护”。

 

    对系统通知区的图标点击右键,可以弹出上下文菜单,选择“自动关机”菜单,则弹出自动关机的设置窗口如下。可以设置在一段时间或者某个时刻自动关机。自动关机的计时单位精确到分钟。点击确定后,窗口由电池轮廓形状变成倒计时进度条,同时左侧会显示一个“电源”小图标(屏幕右下角通知图标也会切换成一个红色的关机图标),表示进入自动关机状态。如果要取消自动关机,只需再次点击通知图标的上下文菜单,选择“取消自动关机”即可。在倒计时结束后,仍然会弹出一个对话框请求用户确认自动关机,该对话框停留 20 秒钟时间给用户考虑,用户可以在考虑时间内取消自动关机。

 

    

 

    通过通知图标的上下文菜单,选择“选项”,如下图所示。关于设置功能,简单介绍如下:

    (1)刷新频率:程序查询电池剩余电量的频率,单位是秒。

    (2)不透明度:窗口的 Alpha 值,范围从 0 ~ 255。

    (3)依附到当前窗口标题栏:如果不勾选,则程序窗口在屏幕上的位置不会发生变化,这时可以用鼠标进行拖动。勾选以后,窗口自动依附到当前窗口的标题栏靠右侧位置。

    (4)忽略自绘窗口:由于程序使用的是系统配色进行绘制,因此依附到系统统一外观的标准标题栏上视觉效果最好。但是有很多窗口不是标准窗口,这些窗口可能采用了例如 DirectUI 技术来呈现自定义的个性外观,达到更美化的效果,例如 QQ 等客户端。因此依附到这些窗口的右上角时,两者的配色不能保证配色非常协调,因此程序默认,将不会依附到自绘窗口上。

    (5)开机自动运行:如果勾选,将在注册表的下列位置创建 “powermon” 值,用于自动启动。取消打钩时删除该值。

    HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion\Run

 

    

 

    【已知的一些问题】

    (1)依附到窗口标题栏时,某些时候依附的位置不正确。目前已发现的包括窗口类为“CabinetWClass”的窗口,如 windows 资源管理器等。另外,有些时候某些窗口被激活时,电量提示窗未能依附到活动窗口。

    (2)被依附的窗口关闭,最小化时,有时电量提示窗停留在原来的位置,在屏幕上呈现“悬空”状态。

 

    【可执行文件下载链接】

    http://files.cnblogs.com/hoodlum1980/PowerMon.rar

 

    【BUG修正】

    (1)[H] 修复 CBTProc 中处理结束时没有调用 CallNextHookEx 的 bug,该 bug 可能引发输入法切换失效。

    (2)[M] 修复更新进度条进度时,刷新矩形没有涵盖右下方向的行列像素问题,该 bug 导致显示问题。2012年2月20日。

目录
相关文章
|
数据管理 数据库
便携式钻孔测斜仪软件运行状态
设备启动后,自动进入测斜仪程序主界面(若设置了程序自动启动),主界面见图 5.1。若未设置程序自动启动,则可通过双击系统桌面上的测量【APP】程序快捷方式,进入软件。
便携式钻孔测斜仪软件运行状态
Win系统 - 电池续航越来越短?自带工具一秒揪出耗电应用
Win系统 - 电池续航越来越短?自带工具一秒揪出耗电应用
229 0
Win系统 - 电池续航越来越短?自带工具一秒揪出耗电应用
艾伟_转载:让榨汁机定时工作(C#+PLC)
买了自加热的榨汁机每天补充营养是件好事,但是为此早起一个小时却划不来。如果为了节省时间,早上用微波炉加热昨晚做好的豆汁,口感却不怎么好。怎么办?买定时加热的榨汁机,估计价钱会很高,不过市面上好像也没有带这种功能的。
1084 0
|
C#
c#监测电脑状态
原文:c#监测电脑状态 1 public class DeviceMonitor 2 { 3 4 static readonly PerformanceCounter cpuCounter = new PerformanceCounter("Proces...
1040 0