Python 将窗口嵌入到任务栏,在任务栏显示文本

效果展示

任务栏整体展示

任务栏简介

首先,大致了解以下Windows的任务栏,任务栏实质上是一个容器(类名为“Shell_TaryWnd”),在这个容器中有个二级容器(类名为“ReBarWindow32”),在这个二级容器中还有一个类名为“MSTaskSwWClass”的窗口,用来存放最小化后的窗口,他的窗口和“ReBarWindow32”的大小相同。

为了更加直观的理解,如图所示,红色部分为“Shell_TaryWnd”,黄色部分为“ReBarWindow32”,蓝色部分为“MSTaskSwWClass”。

任务栏描述

将窗口嵌入任务栏

想要把窗口嵌入到任务栏中,其实就是将窗口放入“ReBarWindow32”容器中,但是为了不遮挡“MSTaskSwWClass”中的图标,我们需要重新调整“MSTaskSwWClass”容器的大小,为我们自己的窗口留出位置。

在python中,我们可以使用win32gui来获取这三个容器的句柄,然后通过句柄获得窗口的位置及尺寸。

首先,需要找到任务栏“Shell_TaryWnd”的窗口句柄(win32gui.FindWindow用来返回窗口句柄):

m_hTaskbar = win32gui.FindWindow("Shell_TrayWnd", None)

其次,找到他的子窗口“ReBarWindow32”的窗口句柄(win32gui.FindWindowEx用来找窗口中的子窗口):

m_hBar = win32gui.FindWindowEx(m_hTaskbar, 0, "ReBarWindow32", None)

然后,找到m_hBar的子窗口“MSTaskSwWClass”的窗口句柄:

m_hMin = win32gui.FindWindowEx(m_hBar, 0, "MSTaskSwWClass", None)

这样,三个容器的句柄都拿到了,此时m_hBar和m_hMin的窗口位置和大小是相同的,我们通过win32gui.MoveWindow需要调整m_hMin的窗口大小,为我们的程序预留出位置:

b = win32gui.GetWindowRect(m_hBar)  # 获取m_hBar窗口尺寸b为[左,上,右,下]的数组
win32gui.MoveWindow(m_hMin, 0, 0, b[2] - b[0] - 200, b[3] - b[1], True)

其中,我们将m_hMin的有边界向左调整了,在右侧留出了200像素的空间用来存放我们自己的窗口。

接下了,我们需要调整我们自己的窗口到预留位置的大小,以PyQt5为例:

self.setGeometry(b[2] - b[0] - 200, 0, 200, b[3] - b[1])

然后,将我们自己的窗口设置为m_hBar的子窗口:

win32gui.SetParent(int(self.winId()), m_hBar)  # 设置任务栏为此窗口的父窗口

这样就完成了将自己的窗口嵌入到任务栏的所有步骤了。

完整代码

点击查看:但行趣事博客坞

下面是我自己运营的微信小程序“但行趣事”和公众号“微电脑”,更多的技术文章以及视频我会放到小程序和公众号当中,有志同道合的小伙伴也可以在小程序(联系客服按钮)或者公众号(直接留言)当中联系我们

但行趣事小程序
微电脑公众号
  • 4
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

请叫我雯子小姐的小爷

是雯子吖

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值