文章目录

  • PyWin32模块
    • 简介
    • 安装
    • 帮助文档
  • 程序代码
  • 调用的函数
    • 1. win32clipboard.SetClipboardData(format, hMem)
      • 作用
      • 参数
      • 返回值
    • 2. win32gui.FindWindow(ClassName, WindowName)
      • 作用
      • 参数
      • 返回值
    • 3. win32gui.ShowWindow(hWnd, cmdShow)
      • 作用
      • 参数
      • 返回值
    • 4. win32gui.SendMessage(hwnd, message , wparam , lparam)
      • 作用
      • 参数
      • 返回值
  • 运行程序
  • 总结

PyWin32模块

简介

python模块虽多,也不可能满足开发者的所有需求。而且,模块为了便于使用,通常都封装过度,有些功能无法灵活使用,必须直接调用Windows API来实现。而模块pywin32可以解决这个问题,它直接包装了几乎所有的Windows API,可以方便地从Python直接调用,该模块另一大主要功能是通过Python进行COM编程。

安装

可以直接打开cmd命令窗口使用pip执行命令pip install pywin32来安装它。
有什么问题可以去我的主页看看如何安装的。
安装完毕后,在Python安装路径下的Lib\site-packages\win32可以看到所有的API支撑模块,在Lib\site-packages\win32com下则是COM支撑模块。

帮助文档

Lib\site-packages下有一个PyWin32.chm帮助文档,相信对编程有一定基础的看了这个帮助文档就能很快上手。


程序代码

import win32gui
import win32con
import win32clipboard as w
import timedef send(name, msg):#打开剪贴板w.OpenClipboard()#清空剪贴板w.EmptyClipboard()#设置剪贴板内容w.SetClipboardData(win32con.CF_UNICODETEXT, msg)#获取剪贴板内容date = w.GetClipboardData()#关闭剪贴板w.CloseClipboard()#获取qq窗口句柄handle = win32gui.FindWindow(None, name)if handle == 0:print('未找到窗口!')#显示窗口win32gui.ShowWindow(handle,win32con.SW_SHOW)#把剪切板内容粘贴到qq窗口win32gui.SendMessage(handle, win32con.WM_PASTE, 0, 0)#按下后松开回车键,发送消息win32gui.SendMessage(handle, win32con.WM_KEYDOWN, win32con.VK_RETURN, 0)win32gui.SendMessage(handle, win32con.WM_KEYUP, win32con.VK_RETURN, 0)time.sleep(1)#延缓进程def main():name = '言墨'#QQ聊天窗口的名字print('开始')for i in range(1, 11):send(name, '第'+str(i)+'次测试')print('结束')
main()

调用的函数

1. win32clipboard.SetClipboardData(format, hMem)

作用

将数据以指定的剪贴板格式放在剪贴板上。窗口必须是当前剪贴板的所有者,应用程序必须先调用OpenClipboard函数。

参数

1、format:int
用来指定要放到剪切板中的数据的格式。其可以定义的格式如下:

  • CF_DIB ——DIB图片,它包含一个BITMAPINFO结构,然后是位图位。
  • CF_DIF ——软件领域的数据交换格式。
  • CF_PALETTE ——调色板。每当应用程序放置数据在剪贴板依赖于或承担的调色板,它应该在剪贴板上放置的调色板。
    如果剪贴板中包含在CF_PALETTE(逻辑调色板)格式的数据,应用应该使用SelectPalette和RealizePalette的函数来实现(比较)针对该逻辑调色板剪贴板中的任何其他数据。
    剪贴板显示剪贴板中的数据时,总是使用当前调色板的剪贴板是在CF_PALETTE格式的任何对象。
  • CF_PENDATA ——笔扩展的Microsoft笔计算的数据。
  • CF_RIFF ——表示更复杂的音频数据可以被表示为一个CF_WAVE的标准波形格式。
  • CF_SYLK ——微软符号链接(SYLK)格式。
  • CF_TEXT ——ANSI文本格式。回车/换行(CR-LF)组合表示换行。必须用NULL结束字符串。使用此格式为ANSI文本。
  • CF_WAVE ——表示在的标准电波格式之一,例如11 kHz或22kHz的脉冲编码调制(PCM)的音频数据。
  • CF_TIFF ——TIFF标记图像文件格式。
  • CF_UNICODETEXT ——Unicode文本格式。回车/换行(CR-LF)组合表示换行。必须用NULL结束字符串。这是Unicode格式的字符串。

2、hMem:int/buffer
指定格式的数据、字符串、unicode或任何支持缓冲区接口的对象的整数句柄。分配一个全局内存对象,并将该对象的缓冲区复制到新内存中。此参数可以为0,表示窗口在请求时提供指定剪贴板格式的数据(呈现格式)。

返回值

如果函数成功,返回的值是数据的int型句柄。
如果函数失败,则使用GetLastError信息引发win32api.error 。

2. win32gui.FindWindow(ClassName, WindowName)

作用

检索类名和窗口名匹配指定字符串的顶级窗口的句柄。ClassName参数指向类名,WindowName指向窗口名,如果有指定的类名和窗口名则表示成功返回一个窗口的句柄。否则返回零。

参数

1、ClassName:PyResourceId
指向一个用来指定类名的字符串或一个可以确定类名字符串的原子。如果该参数为None时,将会寻找任何与WindowName参数匹配的窗口。
2、WindowName:string
指向一个用来指定窗口名(即窗口标题)的字符串。如果此参数为None,则匹配所有窗口名。

返回值

如果函数执行成功,则返回值是拥有指定窗口类名或窗口名的窗口的句柄。
如果函数执行失败,则返回值为 NULL 。可以通过调用GetLastError函数获得更加详细的错误信息。

3. win32gui.ShowWindow(hWnd, cmdShow)

作用

显示或隐藏窗口并更改其状态。

参数

1、hWnd:int
指窗口句柄。
2、cmdShow:int
指定窗口如何显示。如果发送应用程序的程序提供了STARTUPINFO结构,则应用程序第一次调用ShowWindow时该参数被忽略。否则,在第一次调用ShowWindow函数时,该值应为在函数WinMain中cmdShow参数。在随后的调用中,该参数可以为下列值之一:

  • SW_FORCEMINIMIZE:在WindowNT5.0中最小化窗口,即使拥有窗口的线程被挂起也会最小化。在从其他线程最小化窗口时才使用这个参数。cmdShow=11。
  • SW_HIDE:隐藏窗口并激活其他窗口。cmdShow=0。
  • SW_MAXIMIZE:最大化指定的窗口。cmdShow=3。
  • SW_MINIMIZE:最小化指定的窗口并且激活在Z序中的下一个顶层窗口。cmdShow=6。
  • SW_RESTORE:激活并显示窗口。如果窗口最小化或最大化,则系统将窗口恢复到原来的尺寸和位置。在恢复最小化窗口时,应用程序应该指定这个标志。cmdShow=9。
  • SW_SHOW:在窗口原来的位置以原来的尺寸激活和显示窗口。cmdShow=5。
  • SW_SHOWDEFAULT:依据在STARTUPINFO结构中指定的SW_FLAG标志设定显示状态,STARTUPINFO 结构是由启动应用程序的程序传递给CreateProcess函数的。cmdShow=10。
  • SW_SHOWMAXIMIZED:激活窗口并将其最大化。cmdShow=3。
  • SW_SHOWMINIMIZED:激活窗口并将其最小化。cmdShow=2。
  • SW_SHOWMINNOACTIVE:窗口最小化,激活窗口仍然维持激活状态。cmdShow=7。
  • SW_SHOWNA:以窗口原来的状态显示窗口。激活窗口仍然维持激活状态。cmdShow=8。
  • SW_SHOWNOACTIVATE:以窗口最近一次的大小和状态显示窗口。激活窗口仍然维持激活状态。cmdShow=4。
  • SW_SHOWNORMAL:激活并显示一个窗口。如果窗口被最小化或最大化,系统将其恢复到原来的尺寸和大小。应用程序在第一次显示窗口的时候应该指定此标志。cmdShow=1。

返回值

如果窗口之前可见,则返回值为非零。如果窗口之前被隐藏,则返回值为零。

4. win32gui.SendMessage(hwnd, message , wparam , lparam)

作用

该函数将指定的消息发送到一个或多个窗口。此函数为指定的窗口调用窗口程序,直到窗口程序处理完消息再返回。而和函数PostMessage不同,PostMessage是将一个消息寄送到一个线程的消息队列后就立即返回。

参数

1、hwnd:int
指定要接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。
2、Msg:int
指定被发送的消息。
3、wparam:int/str
指定附加的消息特定信息。
4、Iparam:int/str
指定附加的消息特定信息。

具体的参数取值可以参考一下百度百科的内容:https://baike.baidu.com/item/SendMessage/6374103?fr=aladdin

返回值

返回值指定消息处理的结果,依赖于所发送的消息。


运行程序

首先的要求是要打开QQ聊天对话窗口,也不能最小化,然后运行程序,得到下图的测试结果:


总结

经过多次测试发现,在把剪贴板内容粘贴到消息发送框时总有几次会失败,目前找不到原因,解决方法就是只能多次循坏来保证消息发送成功。

Python笔记之通过PyWin32模块实现在QQ聊天窗口自动发送消息相关推荐

  1. Python笔记:使用pywin32处理excel文件

    因为前端同事须要批量的对excel文件做特殊处理,删除指定行,故写了此脚本.同一时候配合config.ini方便不熟悉py的同事使用 #!/usr/bin/env python #-*- coding ...

  2. 【Python笔记】使用 re 模块实现正则表达式操作

    使用 re 模块实现正则表达式操作 匹配字符串 使用 match() 方法进行匹配 使用 search() 方法进行匹配 使用 findall() 方法进行匹配 替换字符串 使用正则表达式分割字符串 ...

  3. Python笔记:利用pygame模块实现三原色颜色滚动条效果

    import pygame from pygame.locals import * from sys import exit def create_scales(height):#用于创建指定大小的图 ...

  4. 【Python】pywin32实用小记|pywin32操作QQ聊天窗口爆破PS学姐

    开局一张图:被这些PS学姐搞烦了,一直想着那天要是他们再来就...今天这个想法成真了. 效果图: 代码在最下面,当然啦这样做其实是不好的,我也就是图一乐,但是哪怕是真的不在乎也要小心被封号.对于这种嘛 ...

  5. Windows10系统Python语言利用Pywin32模块模拟鼠标点击

    Python模块pywin32包装了几乎所有的Windows API,可以方便地直接调用,非常方便. 几个步骤: 1. 检测小弹窗是否弹出: 2. 确定小弹窗中"确定"按钮的位置: ...

  6. Python学习笔记:常用第三方模块3

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  7. Python学习笔记:常用第三方模块(1)

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  8. Python学习笔记:常用内建模块7XML

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

  9. Python学习笔记:常用内建模块5

    前言 最近在学习深度学习,已经跑出了几个模型,但Pyhton的基础不够扎实,因此,开始补习Python了,大家都推荐廖雪峰的课程,因此,开始了学习,但光学有没有用,还要和大家讨论一下,因此,写下这些帖 ...

最新文章

  1. java rmi反序列化漏洞 简介
  2. torchvision0.2.2_速度全面碾压,PCIE4.0 M.2对撞PCIE3.0 M.2
  3. Linux安装pear包
  4. 【数据结构与算法】之深入解析“预测赢家”的求解思路与算法示例
  5. C语言 串口通知消息,编程模式·观察者模式、事件通知、消息队列三者区别
  6. 玩转android studio,玩转AndroidStudioIDE
  7. 卷积码Viterbi译码算法基本原理及C语言实现
  8. [Golang]计算一个文件的MD5值
  9. 分布式系统领域经典论文翻译集
  10. c语言选择题题及答案,c语言选择题
  11. STM32f746gdiscovery 触摸屏 FT5336 驱动
  12. 参加百度开放云编程马拉松后一点总结
  13. android下划线链接,android7.0 TextView去除超链接下划线就这么难吗?
  14. JAVA快递单号查询接口对接教程【快递鸟DEMO】
  15. Android版本和SDK版本
  16. 2022-10-17 环境映射
  17. Bugku:Snowfall
  18. 汽车之家APP车型口碑--参数分析
  19. Linux宝塔Apache死机,宝塔面板重启不了apache,出现错误:httpd not running, trying to start...
  20. SaaS:云计算创业创新趋势

热门文章

  1. clickhouse-MergeTree原理解析
  2. 使用Visio 2013 画跨职能流程图
  3. UICollectionView简单使用
  4. Mac百度云盘不限速操作步骤
  5. Pix2Text (P2T) 新版发布,离Mathpix又近了一大步
  6. Office word 列表级别不显示解决办法
  7. 小程序识别企业微信二维码功能
  8. 【照片动态特效系列】旋转吧,照片!
  9. 速卖通商品详情API接口(商品详情页面数据接口)
  10. GO 语言核心编程-全文版