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 项目索引号
#
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操作的更多相关文章

  1. win32api win32gui win32con 窗口句柄 发送消息 常用方法

    Pywin32是一个Python库,为python提供访问Windows API的扩展,提供了齐全的windows常量.接口.线程以及COM机制等等. 1.通过类名和标题查找窗口句柄,并获得窗口位置和 ...

  2. Python win32gui调用窗口到最前面

    Python win32gui调用窗口到最前面 0要写一个轮询几个重要页面的程序,不停的在大屏上进行刷新,通过pywin32模块下的SetForegroundWindow函数调用时,会出现error: ...

  3. Python模拟鼠标和键盘操作实现重复性操作

    前言 由于工作需要,要利用某软件去采集数据,做重复的动作大概500多次.所以想写一个程序代替人,去点击和输入. 一开始的思路有两个:1.用Python或者windows对此软件直接操作.2.利用Pyt ...

  4. python 文件及文件夹操作

    python 文件.目录操作(新增.移动.删除等) python 文件夹与文件操作 mport string, os, sys dir = '/var' print '----------- no s ...

  5. 使用Python对Excel进行读写操作

    学习Python的过程中,我们会遇到Excel的读写问题.这时,我们可以使用xlwt模块将数据写入Excel表格中,使用xlrd模块从Excel中读取数据.下面我们介绍如何实现使用Python对Exc ...

  6. Python/Django(CBV/FBV/ORM操作)

    Python/Django(CBV/FBV/ORM操作) CBV:url对应的类(模式) ##====================================CBV操作============ ...

  7. Python_基于Python同Linux进行交互式操作实现通过堡垒机访问目标机

    基于Python同Linux进行交互式操作实现通过堡垒机访问目标机   by:授客 QQ:1033553122 欢迎加入全国软件测试交流群:7156436 实现功能 1 测试环境 1 代码实践 2 注 ...

  8. python入门学习:3.操作列表

    python入门学习:3.操作列表 关键点:列表 3.1 遍历整个列表3.2 创建数值列表3.3 使用列表3.4 元组 3.1 遍历整个列表   循环这种概念很重要,因为它是计算机自动完成重复工作的常 ...

  9. 在Python程序中的进程操作,multiprocess.Process模块

    在python程序中的进程操作 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起 ...

  10. 【转】python 历险记(四)— python 中常用的 json 操作

    [转]python 历险记(四)— python 中常用的 json 操作 目录 引言 基础知识 什么是 JSON? JSON 的语法 JSON 对象有哪些特点? JSON 数组有哪些特点? 什么是编 ...

随机推荐

  1. 理解twisted中的reactor和deferred(一)

    Deferred是一个延迟加载对象,这个概念类似于tornado future,是调用异步操作返回的一个对象,其中包括了操作成功后的回调处理,错误后的回调处理. 简单讲,当我们需要执行一个耗时操作,比 ...

  2. kdress学习

    这两天看了一本书叫<linux二进制分析>,这里面提到的一个小工具kdress,这里分析一下 源码在:https://github.com/elfmaster/kdress kdress介 ...

  3. Jmeter之Plugin插件,服务器监控

    Jmeter Plugins插件 我在测试工作中:主要使用了监听器中的图表报告和监控服务器CPU,内存(这篇博文就是对插件的安装,以及jmeter怎么监控服务器CPU~) 1.下载安装Plugins插 ...

  4. Java 封装与类

    一.面向对象编程 面向对象编程三大特性:封装.继承和多态. 类是实现封装的手段,是面向对象编程的基本单元. 封装隐藏了类的内部实现细节,暴露给外界可控的操作,提高数据的完整性和安全性,提高模块的可重用 ...

  5. Java Web Tomcat服务器

    一.Tomcat目录结构 1.bin:存放脚本文件.其中有个档是catalina.bat,打开这个配置文件,在非注释行加入JDK路径(SET JAVA_HOME=C:\j2sdk1.4.2_06)保存 ...

  6. 解决sql "Compatibility_199_804_30003" 和 "SQL_Latin1_General_CP1_CI_AS" 之间的排序规则冲突。

    关联条件加  COLLATE Compatibility_199_804_30003

  7. centos7 修改时区,同步时间,Mysql修改时区

    查看时区 timedatectl status [root@localhost nova-back]# timedatectl status Local time: Thu 2019-05-23 15 ...

  8. 【原创】马哥 文本三剑客之awk

    命令 awk 全称: man搜索: 简述 基本用法 选项 用法与实验 print 打印 (1)(2)(3) 变量 1.内建变量 FS与OFS RS与ORS NR与FNR NF ARGC与ARGC 2. ...

  9. python3之POST请求URL

    方法一:使用requests模块 import requests as rq import json def funcpost(): url = 'http://www.***.com/' # 需要请 ...

  10. 2.Java NIO 简介

    概述 Java NIO 是 JDK 1.4 发布的一套全新的IO API(New IO 简称 NIO),由于 JDK 1.7 对 NIO 的更新,目前 NIO 被广泛应用,以至于 将 JDK 1.7 ...