首页 > 文章列表 > Python如何实现GUI界面实时跟随微信窗口移动?

Python如何实现GUI界面实时跟随微信窗口移动?

Python
186 2023-05-06

Python怎么实现实时跟随微信窗口移动的GUI界面

Python写一些简单的GUI界面也是非常简单的,并且Python有着丰富的库,这些库可以很方便我们去操作Windows系统,搭配界面,可以做出很多精美的小工具。本文的案例写一个简单的实例,使用Python创建一个窗口,这个窗口实时监听微信PC版客户端窗口的状态,并且实时跟随在微信电脑版的右侧。

代码

import tkinter as tk

import win32gui

import win32con



class FollowWeChatWindow(tk.Tk):

    def __init__(self):

        super().__init__()



        # 隐藏窗口边框和标题栏

        self.overrideredirect(True)

        self.title("跟随微信的窗口")



        # 窗口置顶

        self.wm_attributes('-topmost', True)



        # 创建一个标签,用于显示窗口位置信息

        self.label = tk.Label(self, text='')

        self.label.pack()



        # 启动定时器

        self.after(50, self.update_window)



    def update_window(self):

        # 获取微信窗口句柄和位置

        wechat_hwnd = win32gui.FindWindow('WeChatMainWndForPC', None)

        if wechat_hwnd:

            wechat_rect = win32gui.GetWindowRect(wechat_hwnd)



            # print(win32gui.GetWindowText(win32gui.GetForegroundWindow()))

            # 获取当前鼠标点击的窗口的句柄的标题

            getClickHownTitle = win32gui.GetWindowText(win32gui.GetForegroundWindow())



            # 判断微信窗口状态,显示或隐藏本窗口

            if win32gui.GetForegroundWindow() == wechat_hwnd:

                # 当前点击的句柄=微信的句柄

                self.wm_attributes('-alpha', 1.0)

            elif getClickHownTitle == '跟随微信的窗口':

                # 当前点击的窗口的标题=跟随微信的窗口

                self.wm_attributes('-alpha', 1.0)

            else:

                # 不满足以上两个条件的其中一条,都得隐藏窗口

                self.wm_attributes('-alpha', 0.0)



            print(getClickHownTitle)



            # 获取微信窗口高度

            WeChat_Height = wechat_rect[3] - wechat_rect[1]



            # 更新本窗口位置

            self.geometry('200x%d+%d+%d' % (WeChat_Height, wechat_rect[2], wechat_rect[1]))



            # 更新标签文本

            self.label.configure(text=win32gui.GetForegroundWindow())



        else:

            # 微信窗口未找到,隐藏本窗口

            self.wm_attributes('-alpha', 0.0)



        # 继续定时器

        self.after(50, self.update_window)



if __name__ == '__main__':

    app = FollowWeChatWindow()

    app.mainloop()

代码解释

在这个示例中,使用了Python自带的tkinter界面库来实现一个简单的无边框窗口,窗口宽度200,高度与微信窗口一致。通过获取微信客户端的句柄来实时获取微信窗口的位置及大小,启动定时器实时获取到微信的显示状态,50ms更新一次状态以达到跟随的目的。

动图演示