python---win32gui、win32con、win32api:winAPI操作

摘要:
搜索#参数1窗口类名#参数2窗口标题时不区分大小写--必须完整;窗口句柄text=win32gui。GetWindowText(self.hwnd)#获取窗口标题打印('窗口标题为:text)clsname=win32gui。GetClassName(self.hwnd)#获取窗口类名打印('windows类名:windows)#查找所有顶级窗口的句柄#参数1:

python---win32gui、win32con、win32api:winAPI操作第1张

python操作winAPI

窗口操作:

import sys
from PyQt5.QtWidgets import QApplication, QWidget
from lianxi import Ui_Form
from PyQt5.QtCore import Qt
import win32gui  #winAPI模块--以便于操作窗口


class Win(QWidget,Ui_Form):
    def __init__(self):
        super(Win, self).__init__()
        self.setupUi(self)
        self.setWindowFlag(Qt.MSWindowsFixedSizeDialogHint)  # 窗体不能调整大小
        self.setWindowTitle('练习')


    def lianxi1(self):  #win32gui按钮的槽函数
        self.hwnd = win32gui.GetForegroundWindow()  # 获取最前窗口句柄
        self.hwnd = win32gui.FindWindow(0, wdname)  # 根据窗口标题,取得窗口句柄
        # 函数功能:该函数获得一个顶层窗口的句柄,该窗口的类名和窗口名与给定的字符串相匹配。这个函数不查找子窗口。在查找时不区分大小写
        # 参数1 窗口类名
        # 参数2 窗口标题--必须完整;如果该参数为None,则为所有窗口全匹配
        # 返回值:如果函数成功,返回值为窗口句柄;如果函数失败,返回值为0

        #self.hwnd = win32gui.FindWindow("Notepad", None)  # 根据窗口类名,取得窗口句柄

        print('窗口句柄为:', self.hwnd)
        if self.hwnd != 0:
            win32gui.SetForegroundWindow(self.hwnd)  # 窗口显示最前面
            # 参数:窗口句柄
        text = win32gui.GetWindowText(self.hwnd)  # 获取窗口标题
        print('窗口标题为:', text)
        clsname = win32gui.GetClassName(self.hwnd)  #获取窗口类名
        print('窗口类名:',clsname)
        left, top, right, bottom = win32gui.GetWindowRect(self.hwnd)  # 获取窗口位置
        #left, top是左上角坐标;right, bottom是右下角坐标
        print('窗口位置',left, top, right, bottom)

        windows = []  #自定义参数,可以是任何类型
        #win32gui.EnumWindows(self.ss, windows)  #寻找所有顶层窗口的句柄
        #参数1:回调函数名称,每找到一个句柄就把句柄和windows传给a和b,并执行一次回调函数
        #参数2:必须有,可以向回调函数传递一些其它参数--传给b,可以是任何类型
        #枚举屏幕上的所有的顶层窗口,轮流地将这些窗口的句柄传递给回调函数的a参数。EnumWindows会一直进行下去,直到枚举完所有的顶层窗口,或者回调函数返回了FALSE.


        #打开一个记事本
        self.hwnd1 = win32gui.FindWindow("Notepad", None)
        print("父窗口句柄:",self.hwnd1)
        win32gui.EnumChildWindows(self.hwnd1,self.sss,windows)  #寻找子窗口句柄
        #参数1  父窗口句柄,如果此参数为Null,则此函数等效于EnumWindows;每找到一个句柄就把句柄和windows传给a和b,并执行一次回调函数
        #参数2 回调函数
        #参数3 自定义参数
        #枚举所有子窗口,轮流地将这些窗口的句柄传递给回调函数的a参数。函数会一直进行下去,直到枚举完所有的子窗口,或者回调函数返回了FALSE
        #特别注意:qt只有一个窗体,里面控件的句柄是找不到的--所以这条指令不能用在Qt绘制的窗口上

        #打开彗星小助手
        self.hwnd=win32gui.FindWindowEx(0,0,0,'彗星小助手')  #查找窗口或子窗口句柄
        #参数1 父窗口句柄;如果是 0, 则函数以桌面窗口为父窗口;如果是 HWND_MESSAGE, 函数仅查找消息窗口
        #参数2 子窗口句柄,必须是参数1的直接子窗口;子窗口以Z序排列,查找参数后面的子窗口;如果是 0, 查找从父窗口的第一个子窗口开始
        #如果参数1和参数2同时是 0, 则函数查找所有的顶层窗口及消息窗口
        #参数3 类名
        #参数4  标题;可以是None
        #返回找到的第一个窗口的句柄
        print('彗星小助手的句柄:',self.hwnd)

        subHandle = win32gui.FindWindowEx(self.hwnd1, 0, "EDIT", None)  # 笔记本类名为EDIT的句柄
        # 编辑框的句柄

        menuHandle = win32gui.GetMenu(self.hwnd1)  #获取窗口的菜单句柄
        #参数 窗口句柄
        print('记事本菜单句柄:',menuHandle)

        subMenuHandle = win32gui.GetSubMenu(menuHandle, 0)  # 获得子菜单或下拉菜单句柄
        #参数1 菜单句柄
        #参数2 子菜单索引号
        print('子菜单文件句柄:',subMenuHandle)

        menuItemHandle = win32gui.GetMenuItemID(subMenuHandle, 0) # 获得菜单项中的的标志符ID,注意,分隔符是被编入索引的
        #参数1 子菜单句柄--文件菜单句柄
        #参数2 项目索引号
        #1
        print(menuItemHandle)


    def sss(self,a,b):
        print(a,b)
    def ss(self,a,b):
        print(a,b)

if __name__ == '__main__':
    app = QApplication(sys.argv)
    wdname = u'练习'
    demo = Win()
    demo.show()
    sys.exit(app.exec_())

代码下载:https://pan.baidu.com/s/1YZ5ifLRO6lCxiJ2blRbMsg  

        hwnd=self.hwnd1 = win32gui.FindWindow("Notepad", None)
        i=win32gui.IsIconic(hwnd)  #检查窗口是否最小化
        #是  返回1,不是返回0
        win32gui.ShowWindow(hwnd, win32con.SW_SHOWNORMAL)  #不要最小化
        hwnd=win32gui.FindWindow("Notepad", None)
        win32gui.ShowWindow(hwnd, win32con.SW_HIDE)  #隐藏窗口
        time.sleep(2)
        win32gui.ShowWindow(hwnd, win32con.SW_SHOW)  #显示窗口
        #SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口

发送消息: 

关闭窗口:

        self.hwnd = win32gui.FindWindow(0, '练习')
        win32gui.PostMessage(self.hwnd, win32con.WM_CLOSE, 0, 0)  #关闭窗口
        #参数1 窗口句柄
        handle = win32gui.FindWindow("Notepad", None)
        subHandle = win32gui.FindWindowEx(handle, 0, "EDIT", None)
        i=win32api.SendMessage(subHandle, win32con.WM_SETTEXT, 0, '我是中国人')  #向窗口发送文本
        #原文本全部被替换
        #参数1 窗口句柄
        #参数4 发送的文本
        #等待窗口处理完毕后返回true
        self.hwnd = win32gui.FindWindow("Notepad", None)
        bufSize = win32api.SendMessage(self.hwnd, win32con.WM_GETTEXTLENGTH, 0, 0)  #获取窗口文本的字符数
        hwnd=win32gui.FindWindow("Notepad", None)
        win32gui.ShowWindow(hwnd, win32con.SW_HIDE)  #隐藏窗口
        time.sleep(2)
        win32gui.ShowWindow(hwnd, win32con.SW_SHOW)  #显示窗口
        #SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口
        hwnd=win32gui.FindWindow("Notepad", None)
        win32gui.ShowWindow(hwnd, win32con.SW_MAXIMIZE)  #最大化指定的窗口。nCmdShow=3
        win32gui.ShowWindow(hwnd, win32con.SW_MINIMIZE)  #最小化指定的窗口并且激活在Z序中的下一个顶层窗口。nCmdShow=6
hwnd=win32gui.FindWindow("Notepad", None)
win32gui.ShowWindow(hwnd, win32con.SW_RESTORE)  #激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。nCmdShow=9
        hwnd=win32gui.FindWindow("Notepad", None)
        win32gui.ShowWindow(hwnd, win32con.SW_SHOWMAXIMIZED)  #激活窗口并将其最大化。nCmdShow=3
        # SW_SHOWMINIMIZED:激活窗口并将其最小化。nCmdShow=2。
        # SW_SHOWMINNOACTIVE:窗口最小化,激活窗口仍然维持激活状态。nCmdShow=7。
        # SW_SHOWNA:以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。nCmdShow=8。
        # SW_SHOWNOACTIVATE:以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。nCmdShow=4。
        # SW_SHOWNORMAL:激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志。nCmdShow=1。

鼠标操作: 

        win32api.SetCursorPos([30,150])  #鼠标定位到(30,50)--坐标系屏幕
        win32api.mouse_event(win32con.MOUSEEVENTF_LEFTUP | win32con.MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0) #执行左单键击,若需要双击则延时几毫秒再点击一次即可
        win32api.mouse_event(win32con.MOUSEEVENTF_RIGHTUP | win32con.MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0)  #右键单击

python---win32gui、win32con、win32api:winAPI操作第2张

免责声明:文章转载自《python---win32gui、win32con、win32api:winAPI操作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇linux下的软件包安装VREP中的力触觉设备接口(CHAI3D)下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

使用宝塔面板 配置nginx 访问ftp服务器下面的图片

如果 你在服务器上 运行war项目 可以在tomcat 配置访问的: tomcat 也贴出来吧! 一.tomca配置访问,需要更改配置文件server.xml ,如果找不到,自己好好找一下  一般在 tomcat/conf 这个目录下面 1. 截图:  2.  3.找到 <Host></Host> 这个标签 然后在<Host...

一文带你搞定AOP切面

摘要:AOP在spring中又叫“面向切面编程”,是对传统我们面向对象编程的一个补充,主要操作对象就是“切面”,可以简单的理解它是贯穿于方法之中,在方法执行前、执行时、执行后、返回值后、异常后要执行的操作。 本文分享自华为云社区《一篇文搞懂《AOP面向切面编程》是一种什么样的体验?》,作者: 灰小猿。 一、什么是Spring的AOP? AOP在sprin...

微信小程序怎么获取当前页面的url

使用getCurrentPages可以获取当前加载中所有的页面对象的一个数组,数组最后一个就是当前页面。 var pages = getCurrentPages() //获取加载的页面 var currentPage = pages[pages.length-1] //获取当前页面的对象 var url = currentPage.rou...

UVM基础之---------uvm factory机制base

从名字上面就知道,uvm_factory用来制造uvm_objects和component。在一个仿真过程中,只有一个factory的例化存在。 用户定义的object和component types通过typedef或者宏在factory中注册,factory产生和保存轻量级的代理(proxy):   1.  uvm_object_registry #(...

CloseHandle()函数的使用

 很多程序在创建线程都这样写的:............ThreadHandle = CreateThread(NULL,0,.....);CloseHandel(ThreadHandle );。。。。。这不是刚好创建又关闭了吗?线程怎么运行呢? ================================================ Closi...

DB2常用函数详解

(一) 字符串函数 VALUE函数  语法:VALUE(EXPRESSION1,EXPRESSION2)  VALUE函数是用返回一个非空的值,当其第一个参数非空,直接返回该参数的值,如果第一个参数为空,则返回第二个参数的值。 --表示如果T1.ID为空,则返回空串,如果T1.ID不为空,则返回T1.ID。    eg:SELECT VALUE(ID,''...