大家好,又见面了,我是你们的朋友全栈君。
Python—-pywin32如何获取窗口句柄
halo,各位读者,本栏目开设一个围绕着“如何用Python来制作PC软件”展开。
当我们想用处理Windows的软件窗口时,常常会碰到想将窗口置顶、隐藏和显示等等,还有读者想将电脑托盘、任务栏等都隐藏的情况。本篇文章就是带领读者学习窗口句柄,并且如何应用Python带的win32 模块来读取界面中各个窗口的句柄。
希望通过此篇文章,可以让读者朋友跟着步骤操作,最终可以做出自己的小软件。
一:介绍要用到的库
import sys
import win32gui
import win32con
二:显示窗口的属性
1. 获取所有窗口的句柄
def get_all_windows():
hWnd_list = []
win32gui.EnumWindows(lambda hWnd, param: param.append(hWnd), hWnd_list)
print(hWnd_list)
return hWnd_list
>>[66364, 66014, 65964, 65854, 65850, 65846, 65842, 65826, 65812, 65802, 65858, 65862, 65876, 65794, ....]
2.获取窗口的子窗口句柄
def get_son_windows(parent):
hWnd_child_list = []
win32gui.EnumChildWindows(parent, lambda hWnd, param: param.append(hWnd), hWnd_child_list)
print(hWnd_child_list)
return hWnd_child_list
>>[66364, 66014, 65964, 65854, ...]
3.获取句柄的标题
def get_title(hwnd):
title = win32gui.GetWindowText(hwnd)
print('窗口标题:%s' % (title))
return title
>>窗口标题:设置
4.获取窗口类名
def get_clasname(hwnd):
clasname = win32gui.GetClassName(hwnd)
print('窗口类名:%s' % (clasname))
return clasname
>>窗口类名:ApplicationFrameWindow
三、实际操作
1.置顶和取消
窗口置顶
def set_top(hwnd):
win32gui.SetWindowPos(hwnd, win32con.HWND_TOPMOST, 0, 0, 0, 0,
win32con.SWP_NOMOVE | win32con.SWP_NOACTIVATE | win32con.SWP_NOOWNERZORDER | win32con.SWP_SHOWWINDOW | win32con.SWP_NOSIZE)
窗口取消置顶
def set_down(hwnd):
win32gui.SetWindowPos(hwnd, win32con.HWND_NOTOPMOST, 0, 0, 0, 0,
win32con.SWP_SHOWWINDOW | win32con.SWP_NOSIZE | win32con.SWP_NOMOVE)
2.显示和隐藏窗口
根据窗口名称获取句柄
#根据窗口名称获取句柄
def get_hwnd_from_name(name):
hWnd_list = get_all_windows()
for hwd in hWnd_list:
title = get_title(hwd)
if title == name:
return hwd
窗口显示
def xianshi(name):
hwd = get_hwnd_from_name(name)
win32gui.ShowWindow(hwd, win32con.SW_SHOW)
窗口隐藏
def yingcang(name):
hwd = get_hwnd_from_name(name)
win32gui.ShowWindow(hwd, win32con.SW_HIDE)
四、案例演示
显示和隐藏托盘
获取右下角托盘的任务句柄
#获取右下角托盘的任务句柄
def get_tuopan_hwd():
handle = win32gui.FindWindow("Shell_TrayWnd", None)
hWnd_child_list = get_son_windows(handle)[1:]
tuopan_hwd_list = []
flag = False
for i in hWnd_child_list:
if get_clasname(i) == 'TrayNotifyWnd':
flag = True
if flag:
tuopan_hwd_list.append(i)
return tuopan_hwd_list
隐藏托盘
def yingcang(name=''):
tuopan_hwd_list = get_tuopan_hwd()
if name == '':
for i in tuopan_hwd_list[:7] :#[:7]因为要保留一些基本的内容,也可以全部隐藏
win32gui.ShowWindow(i, win32con.SW_HIDE)
else:
win32gui.ShowWindow(name, win32con.SW_HIDE)
显示托盘
def xianshi(name = ''):
tuopan_hwd_list = get_tuopan_hwd()
if name == '':
for i in tuopan_hwd_list:
win32gui.ShowWindow(i, win32con.SW_SHOW)
else:
win32gui.ShowWindow(name, win32con.SW_SHOW)
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/162549.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...