python对pc的窗口进行操作(windows)

派生博客1:基于windows系统使用Python对于pc当前的所有窗口的相关操作接口

派生博客2python获取当前pc的分辨率(windows)

派生博客3使用uiautomation模块来对基于windows系统的pc中的前端界面进行自动化测试(查找控件,点击控件等)

import win32con
import win32gui

直接获取当前pc最上面窗口的句柄

page_hwnd = win32gui.GetForegroundWindow()

获取子窗口的父窗口句柄

parent_handle = win32gui.GetParent(child_handle)

判断某个整数是否是一个窗口的句柄。若是,则返回值不为0,否则返回0

win32gui.IsWindow(hwnd)

根据窗口句柄获取窗口的类名

top_page_class_name = win32gui.GetClassName(page_hwnd)

根据窗口句柄获取窗口的名字

top_page_name = win32gui.GetWindowText(page_hwnd)

根据窗口句柄获取窗口的坐标数值 得到的返回值为元组类型如(12,15,214,166),左上右下

top_page_rect = win32gui.GetWindowRect(page_hwnd)

获取鼠标指针当前的坐标返回元组类型(15,888)

tempt = win32gui.GetCursorPos()

最小化窗体

win32gui.ShowWindow(page_hwnd, win32con.SW_MINIMIZE)

最大化窗体

win32gui.ShowWindow(page_hwnd, win32con.SW_MAXIMIZE)

还原窗体(一般此时窗体处于最大化状态,右上角之前的最大化标志变成有两个“口”套在一起的标志)

win32gui.ShowWindow(page_hwnd, win32con.WM_SYSCOMMAND, win32con.SC_RESTORE, 0)

显示窗体

win32gui.ShowWindow(page_hwnd, win32con.SW_SHOW)

隐藏窗体

win32gui.ShowWindow(page_hwnd, win32con.SW_HIDE)

确保特定句柄的窗口在最上面

win32gui.SetForegroundWindow(page_hwnd)

关闭对应句柄的窗口

win32gui.SendMessage(page_hwnd, win32con.WM_CLOSE)

检查窗口是否最小化,如果是最小化则使其最大化

if (win32gui.IsIconic(page_hwnd)):
win32gui.ShowWindow(page_hwnd, win32con.SW_SHOWNORMAL)

# 最大化窗口
win32con.SW_MAXIMIZE
# 最小化窗口
win32con.SW_MINIMIZE
# 激活窗口并将其最大化
win32con.SW_SHOWMAXIMIZED
# 激活窗口并将其最小化
win32con.SW_SHOWMINIMIZED
# 窗口最小化,激活窗口任然维持激活状态
win32con.SW_SHOWMINNOACTIVE
# 激活并显示窗口,如果窗口被最小化或者最大化,系统将恢复到期原来的尺寸和大小,应用程序在第一次显示窗口时,程序应该指定这个标志
win32con.SW_SHOWNORMAL
# 以窗口原来的状态显示窗口,激活窗口任然维持激活状态
win32con.SW_SHOWNA
# 隐藏窗口并激活其他窗口
win32con.SW_HIDE
# 激活并显示窗口,如果窗口被最小化或者最大化,系统将恢复到期原来的尺寸和大小,在恢复最小化窗口时,程序应该指定这个标志
win32con.SW_RESTORE
# 在窗口原来的位置以及原来的尺寸激活和显示窗口
win32con.SW_SHOW
# 不详
win32con.SW_SHOWDEFAULT

键盘操作点击回车键

import win32api

按下去

win32api.keybd_event(13, 0, 0, 0)

松开

win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)

其他按键类似,只需要找到且对应各自按键的键位码就行

字母和数字键 数字小键盘的键 功能键 其它键
键 键码 键 键码 键 键码 键 键码
A 65 0 96 F1 112 Backspace 8
B 66 1 97 F2 113 Tab 9
C 67 2 98 F3 114 Clear 12
D 68 3 99 F4 115 Enter 13
E 69 4 100 F5 116 Shift 16
F 70 5 101 F6 117 Control 17
G 71 6 102 F7 118 Alt 18
H 72 7 103 F8 119 Caps Lock 20
I 73 8 104 F9 120 Esc 27
J 74 9 105 F10 121 Spacebar 32
K 75 * 106 F11 122 Page Up 33
L 76 + 107 F12 123 Page Down 34
M 77 Enter 108 End 35
N 78 - 109 Home 36
O 79 . 110 Left Arrow 37
P 80 / 111 Up Arrow 38
Q 81 Right Arrow 39
R 82 Down Arrow 40
S 83 Insert 45
T 84 Delete 46
U 85 Help 47
V 86 Num Lock 144
W 87
X 88
Y 89
Z 90
0 48
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57

import win32con
import win32gui


# 直接获取当前pc最上面窗口的句柄
top_page_hwnd = win32gui.GetForegroundWindow()
# 根据窗口句柄获取窗口的类名
top_page_class_name = win32gui.GetClassName(top_page_hwnd)
# 根据窗口句柄获取窗口的名字
top_page_name = win32gui.GetWindowText(top_page_hwnd)
# 根据窗口句柄获取窗口的坐标数值  得到的返回值为元组类型如(12,15,214,166),左上右下
top_page_rect = win32gui.GetWindowRect(top_page_hwnd)
# 获取鼠标指针当前的坐标返回元组类型(15,888)
tempt = win32gui.GetCursorPos()

# 获取子窗口的父窗口句柄
parent_handle = win32gui.GetParent(child_handle)
# 判断某个整数是否是一个窗口的句柄。若是,则返回值不为0,否则返回0
win32gui.IsWindow(hwnd)

# 最小化窗体
win32gui.ShowWindow(top_page_hwnd, win32con.SW_MINIMIZE)
# 最大化窗体
win32gui.ShowWindow(top_page_hwnd, win32con.SW_MAXIMIZE)
# 还原窗体(一般此时窗体处于最大化状态,右上角之前的最大化标志变成有两个“口”套在一起的标志)
win32gui.ShowWindow(top_page_hwnd, win32con.WM_SYSCOMMAND, win32con.SC_RESTORE, 0)
# 显示窗体
win32gui.ShowWindow(top_page_hwnd, win32con.SW_SHOW)
# 隐藏窗体
win32gui.ShowWindow(top_page_hwnd, win32con.SW_HIDE)
# 确保特定句柄的窗口在最上面
win32gui.SetForegroundWindow(top_page_hwnd)
# 关闭对应句柄的窗口
win32gui.SendMessage(top_page_hwnd, win32con.WM_CLOSE)
# 检查窗口是否最小化,如果是最小化则使其最大化
if (win32gui.IsIconic(top_page_hwnd)):
    win32gui.ShowWindow(top_page_hwnd, win32con.SW_SHOWNORMAL)

# 键盘操作点击回车键
import win32api
# 按下去
win32api.keybd_event(13, 0, 0, 0)
# 松开
win32api.keybd_event(13, 0, win32con.KEYEVENTF_KEYUP, 0)

接口整理

import win32gui
import win32api
import win32con

# 获取最上面窗口的句柄
top_page_hwnd = win32gui.GetForegroundWindow()
# 获取对应句柄的窗口的类名
hwnd_page_class_name = win32gui.GetClassName(top_page_hwnd)
# 获取对应句柄的窗口的名字
hwnd_page_name = win32gui.GetWindowText(top_page_hwnd)
# 获取窗口的坐标尺寸值,返回得到的是一个元组的值如(12,23,14,25)
hwnd_page_rect = win32gui.GetWindowRect(top_page_hwnd)
# 获取窗口工作区的坐标尺寸值
page_rect = win32gui.GetClientRect(top_page_hwnd)
# 获取鼠标指针当前的坐标,得到元组类型如(12,25)
rect = win32api.GetCursorPos()
# 检查窗口是否最小化,如果是的话使其最大化
if (win32gui.IsIconic(top_page_hwnd)):
    win32gui.ShowWindow(top_page_hwnd, win32con.SW_SHOWNORMAL)
# 隐藏窗体
win32gui.ShowWindow(top_page_hwnd, win32con.SW_HIDE)
# 显示窗体
win32gui.ShowWindow(top_page_hwnd, win32con.SW_SHOW)
# 最小化窗体
win32gui.ShowWindow(top_page_hwnd, win32con.SW_MINIMIZE)
# 最大化窗体
win32gui.ShowWindow(top_page_hwnd, win32con.SW_MAXIMIZE)
# 还原对应窗口的状态如(最大化窗口之后的还原)
win32gui.ShowWindow(top_page_hwnd, win32con.WM_SYSCOMMAND, win32con.SC_RESTORE, 0)


# 参数含义
# 预定义值等 效 值
# SW_HIDE	 隐藏窗口,大小不变,激活状态不变
# SW_MAXIMIZE	 最大化窗口,显示状态不变,激活状态不变
# SW_MINIMIZE	 最小化窗口,显示状态不变,激活状态不变
# SW_RESTORE	 从最大化或最小化恢复正常大小,显示状态不变,激活状态不变
# SW_SHOW	 显示并激活窗口,大小状态不变
# SW_SHOWMAXIMIZED	 显示并激活窗口,以最大化显示
# SW_SHOWMINIMIZED	 显示并激活窗口,以最小化显示
# SW_SHOWMINNOACTIVE	 显示窗口并最小化,激活状态不变
# SW_SHOWNA	 显示窗口,大小状态不变,激活状态不变
# SW_SHOWNOACTIVATE	 显示并从最大化或最小化恢复正常大小,激活状态不变
# SW_SHOWNORMAL	 显示并激活窗口,恢复正常大小(初始化时用这个参数)

# 关闭对应句柄的窗口
win32gui.SendMessage(top_page_hwnd, win32con.WM_CLOSE)

# 确保窗口在最上面
win32gui.SetForegroundWindow(top_page_hwnd)


# 发送回车键
win32api.keybd_event(13,0,0,0)
win32api.keybd_event(13,0,win32con.KEYEVENTF_KEYUP,0)

# 获取屏幕分辨率
# x
win32api.GetSystemMetrics(0)
# y
win32api.GetSystemMetrics(1)



class WindowsPageTest():
    """窗口操作类"""
    def __init__(self):
        pass
        
    @staticmethod
    def get_top_page_info():
        """获取最上面窗口的信息"""
        page_info_dict = {}
        # 获取最上面窗口的句柄
        top_page_hwnd = win32gui.GetForegroundWindow()
        # 获取对应句柄的窗口的类名
        hwnd_page_class_name = win32gui.GetClassName(top_page_hwnd)
        # 获取对应句柄的窗口的名字
        hwnd_page_name = win32gui.GetWindowText(top_page_hwnd)
        
        page_info_dict["hwnd"] = top_page_hwnd
        page_info_dict["class_name"] = top_page_hwnd
        page_info_dict["page_name"] = top_page_hwnd
        return page_info_dict


    @staticmethod
    def set_target_page_min(page_hwnd):
        """最小化窗体"""
        win32gui.ShowWindow(page_hwnd, win32con.SW_MINIMIZE)
        
    @staticmethod
    def set_target_page_max(page_hwnd):
        """最大化窗体"""
        # 最大化窗口
        win32gui.ShowWindow(page_hwnd, win32con.SW_MAXIMIZE)
        # 确保窗口在最上面
        win32gui.SetForegroundWindow(page_hwnd)
        
    @staticmethod
    def get_page_rect_info(page_hwnd):
        """获取窗口的坐标尺寸返回如 (12,23,15,45)的元组"""
        page_rect = win32gui.GetWindowRect(page_hwnd)
        return page_rect
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值