读取其它进程进度条的进度并显示在任务栏图标上

从Win7开始,任务栏图标可以用来显示进度了。但是仍然有很多需要显示进度的程序并没有将这一功能用起来,其中甚至包括Windows自身的蓝牙传输。我想写一个程序,它拥有一个任务栏图标,它可以读取其它程序窗口中的进度条,并将进度显示在自己的任务栏图标上。要实现一个这样的程序,有三个问题需要解决:
(1) 如何获取想要监视的进度条的句柄;
(2) 如何获取进度条的进度;
(3) 如何在任务栏图标上显示进度。
对于第一个问题,我觉得自己写稍微有些麻烦,实际上可以借助现成的工具,比如Visual Studio自带的Spy++。但是Visual Studio是一个昂贵而庞大的开发环境,不是每个人都有。AutoIt自带的Window Info是一个不错的选择,而且当过管理员管理过几台电脑的人都会用两下子AutoIt吧,毕竟安装软件什么的苦活累活一般都交给AutoIt这样的自动化软件来做了。

对于第二个问题,我查了一下,利用SendMessage给进度条发PBM类的消息即可。其中要用到的两个分别为:
PBM_GETRANGE:获取进度条的范围
PBM_GETPOS:获取进度

对于第三个问题,Vista以来提供的一系列新的API都是以接口的方式出现的。这让我想起来很久以前看过的一本书,提到Win32API的一个问题是平面化的API,没有组织和结构,以后的Windows API可能会以接口的方式出现。没想到书中的这一预言真的应验了。由于需要直接操纵接口,很多ActiveX/COM库都没法用了。好在comtypes提供了非常底层的机制,我们可以自己定义接口,继承IUnknown,调用IDispatch等等。
解决了三个问题,程序也就写出来了,源码参见https://github.com/xialulee/WaveSyn/blob/master/wavesynlib/interfaces/windows/progressbarreader.py。现在试验一下效果。我们用蓝牙往电脑上传一个文件:

用AutoIt Window Info探测进度条的句柄:

以进度条的句柄为参数启动progressbarreader.py:
progressbarreader.py 0x21DF2

启动的Python程序的任务栏图标就会显示蓝牙传输的进度。这是我们可以把蓝牙传输窗口最小化,然后干别的事情,在这种情况下依然能够通过Python的任务栏图标随时掌握蓝牙传输的进度。
最初发布于:2015年10月23日,http://blog.sina.com.cn/xialulee

(0)

相关推荐

  • excel表格百分比进度条怎么做

    excel进度条制作步骤如下: 我们先来观察一下最终效果图,图中红色方框里单元格里有柱状进度条,百分比显示数值.而我们就是要做出这种效果. 为了方便说明,我把上图中的表格复制,只是黏贴的时候选择只黏贴 ...

  • C#进度条怎么用 / C#progressBar的用法

    在编程工作中经常需要设置进度条,比如表示下载的进度.拷贝的进度.复制文件的进度等等.下面小编就介绍一下在C#中进度条的使用方法: 操作方法 01 打开Microsoft Visual Studio 2 ...

  • 怎么在excel单元格中按百分比显示进度条/柱形图

    直奔主题吧,对比下面两幅图中红色方框里的数据,哪一种更让你一目了然呢,很显然,是带有柱状进度条的那一幅可以一下子看出各行所占的比例等.那么怎么做出这种效果呢? 操作方法 01 我们先来观察一下最终效果 ...

  • Bootstrap4如何设置进度条

    今天武志伟小编分享一下Bootstrap4如何设置进度条属性,做出漂亮的进度条. 操作方法 01 添加一个带有 .progress 类的 <div>. 接着,在上面的 <div> ...

  • 绝地求生卡在进度条怎么办?界面读取慢怎么办?

    绝地求生是当前最火爆的网络游戏,但这个游戏对电脑的配置要求比较高,当他卡住进度条或者界面读取慢的时候怎么办呢?下面为你解答. 操作方法 01 一般在玩绝地求生者这个游戏就容易卡在读取进度条的地方,常常 ...

  • 开机减少进度条等待时间

    开机时,系统要在进度条处跑好几圈,使得开机时间加长,以下两招即可解决。 方法1: 打开注册表编辑器,定位到HKEY_LOCAL_MACHINESYSTEMCurrentControlSetContro ...

  • Unity3D:异步加载场景资源进度条

    Unity3D中很多时候需要用到异步加载场景或资源.如异步打开一个非常大的场景;两个场景之间的一个过渡;游戏关卡的加载等等,通过添加一个进度条场景的方式可以很好的增强客户体验,并让客户了解场景的加载进 ...

  • Unity3D 使用 WWW 加载场景并显示进度条

    Unity3D 加载场景有很多种方式,做一些小的 DEMO 的时候往往是直接使用 Application.LoadLevel 或者 Application.LoadLevelAsync 函数加载场景, ...

  • windowsXP进度条界面 图解Windows读条界面卡或慢解决方法

    在进入系统时的windowsXP读条界面很慢,有时会直接卡住一直滚动,无法进入系统。偶尔可以正常进入系统一次,但多数都是直接卡在Windows滚动条界面。 故障现象 无法正常进入Windows系统,一 ...