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

从Win7开始,任务栏图标可以用来显示进度了。但是仍然有很多需要显示进度的程序并没有将这一功能用起来,其中甚至包括Windows自身的蓝牙传输。我想写一个程序,它拥有一个任务栏图标,它可以读取其它程序窗口中的进度条,并将进度显示在自己的任务栏图标上。要实现一个这样的程序,有三个问题需要解决:

(1) 如何获取想要监视的进度条的句柄;

(2) 如何获取进度条的进度;

(3) 如何在任务栏图标上显示进度。

对于第一个问题,我觉得自己写稍微有些麻烦,实际上可以借助现成的工具,比如Visual Studio自带的Spy++。但是Visual Studio是一个昂贵而庞大的开发环境,不是每个人都有。AutoIt自带的Window Info是一个不错的选择,而且当过管理员管理过几台电脑的人都会用两下子AutoIt吧,毕竟安装软件什么的苦活累活一般都交给AutoIt这样的自动化软件来做了。

4933d850395b865523553d1b684e8ed4.png

对于第二个问题,我查了一下,利用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。现在试验一下效果。我们用蓝牙往电脑上传一个文件:

755050b9d48a4edae57553912f3674b6_thumb.png

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

e54e6c1717e28bbe82a1583ea2314e94.png

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

progressbarreader.py 0x21DF2

de979fca3d32734e8f7ac2e0cf43a7f6_thumb.png

启动的Python程序的任务栏图标就会显示蓝牙传输的进度。这是我们可以把蓝牙传输窗口最小化,然后干别的事情,在这种情况下依然能够通过Python的任务栏图标随时掌握蓝牙传输的进度。

最初发布于:2015年10月23日,http://blog.sina.com.cn/xialulee

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值