一、先导入要使用的包:

import win32api
import win32con
import win32gui
import time
import win32clipboard as w

安装包可以通过pip进行安装 : pip install win32api ,我使用的是Anaconda,直接import。

二、找到微信聊天窗口:

def FindWindow(chatroom):win = win32gui.FindWindow(None, chatroom)print("找到群聊窗口:%x" % win)if win != 0:win32gui.ShowWindow(win, win32con.SW_SHOWMINIMIZED)win32gui.ShowWindow(win, win32con.SW_SHOWNORMAL)win32gui.ShowWindow(win, win32con.SW_SHOW)win32gui.SetWindowPos(win, win32con.HWND_TOPMOST, 100, 100, 300, 300, win32con.SWP_SHOWWINDOW)win32gui.SetForegroundWindow(win)  # 获取控制time.sleep(1)else:print('请注意:找不到【%s】这个人(或群),请激活窗口!' % chatroom)exit()
def CloseWindow(chatroom):win = win32gui.FindWindow(None, chatroom)#print("找到关闭窗口:%x" % win)time.sleep(3)win32gui.ShowWindow(win, win32con.SW_SHOWMINIMIZED)

方法FindWindow的作用是通过窗口名找到微信的聊天窗口,微信pc端的窗口名就是群聊或好友的名称,注意的是要想找到某个窗口需要将微信pc端中这个聊天窗口单独拿出来,形成一个独立的窗口,方法是双击某个好友或群聊,如下图,窗口名为文件传输助手。

方法CloseWindow是找到窗口将其最小化,其他属性有:

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

三、复制粘贴及发送文字类消息

先说下文字类的消息怎么发送,之后还可以发送图片及文件。

def setText(aString):w.OpenClipboard()w.EmptyClipboard()w.SetClipboardData(win32con.CF_UNICODETEXT, aString)w.CloseClipboard()

方法setText的作用是打开windows的剪贴板,先清空再将文本复制在剪贴板里,文本格式为:CF_UNICODETEXT

def ctrlV():win32api.keybd_event(17,0,0,0)  #ctrl键位码是17win32api.keybd_event(86,0,0,0)  #v键位码是86win32api.keybd_event(86,0,win32con.KEYEVENTF_KEYUP,0) #释放按键win32api.keybd_event(17,0,win32con.KEYEVENTF_KEYUP,0)def altS():win32api.keybd_event(18, 0, 0, 0)    #Alt键位码win32api.keybd_event(83,0,0,0) #s键位码win32api.keybd_event(18,0,win32con.KEYEVENTF_KEYUP,0) #释放按键win32api.keybd_event(83,0,win32con.KEYEVENTF_KEYUP,0)

上面两个方法分别是ctrl+v与Alt+s的快捷方法,通过这两个方法实现粘贴到聊天窗口和发送的功能。

def sendText(chatrooms,text):for chatroom in chatrooms:FindWindow(chatroom)#文字首行留空,防止带表情复制不完全setText(" "+text)time.sleep(1)ctrlV()time.sleep(1)altS()CloseWindow(chatroom)

整个发送流程通过调用方法:sendText实现,参数chatrooms是窗口数组,一个消息可发送多个窗口,参数text时需要发送的文本。

1、FindWindow找到窗口,并获取窗口的控制,也就是把键盘输入转向该窗口。

2、setText复制文本到剪贴板里,加个空格是为了防止文本消息开头存在表情符号会导致粘贴不完全的问题。

3、time.sleep(1)是因为整个发送流程是模仿人来操作这些流程,流程停顿一下减少出现卡顿、窗口跟不上的问题。

4、ctrlV()  altS()粘贴和发送,用的是快捷键,前提的保证这两个快捷键正常用在微信上,不会与其他软件冲突。

5、CloseWindow最小化窗口,这样能对窗口循环使用。

发送消息大致流程就是这样了,可以根据自己的需求去修改代码,现在说下我为什么会做这么一个功能,不是有现成的itchat、wxpy等包么,主要是前面这两个包都是通过微信网页版api实现的,使用一段时间后我发现掉线情况比较严重,轻则3、4天,重则1天掉几次,完全没有规律,itchat文档说的是一定时间内可以不用再登陆,也没说具体多久,不过我觉得是微信那边的问题。新注册的微信不能用网页版,经常掉线、封号等等问题,让我想到pc端发送,然后就有这么一个奇葩方法,后续会加上图片及文件的发送流程。python还在学习,有不足之处欢迎指点。

python通过win32api、win32clipboard等包实现微信pc端消息自动发送相关推荐

  1. 使用Python+SmsForwarder实现微信PC端通知消息

    目录 一.目的 二.准备: 三.实现逻辑: 四.具体实现: 五.最终效果图: 针对有全屏且任务栏设置隐藏习惯,但是隐藏任务栏后情况,在电脑上看不到微信PC端新消息的问题进行以下方案解决,前提是电脑为W ...

  2. 基于微信PC端小程序抓包方法

    文章目录 前言 一.Proxifier介绍 二.下载及安装 三.使用配置 前言 因为微信小程序基本都是基于HTTPS的,所以抓取HTTPS数据包就是最关键的一步,通过自身实践,推荐使用Proxifie ...

  3. 微信PC端全局代理抓不到数据包的问题

    微信PC端全局代理抓不到数据包的问题 1.问题 之前抓取微信公众号.小程序数据包一直使用模拟器.手机配置代理.偶然发现微信PC端超级方便,配置了全局代理,Burp也配置好了,结果只能抓取到微信公众号数 ...

  4. 微信PC端各个数据库文件结构与功能简述 - Multi文件夹

    异想之旅:本人原创博客完全手敲,绝对非搬运,全网不可能有重复:本人无团队,仅为技术爱好者进行分享,所有内容不牵扯广告.本人所有文章仅在CSDN.掘金和个人博客(一定是异想之旅域名)发布,除此之外全部是 ...

  5. 微信PC端数据库文件解密

    异想之旅:本人原创博客完全手敲,绝对非搬运,全网不可能有重复:本人无团队,仅为技术爱好者进行分享,所有内容不牵扯广告.本人所有文章仅在CSDN.掘金和个人博客(一定是异想之旅域名)发布,除此之外全部是 ...

  6. 微信PC端浏览器内置浏览器

    嵌入式Chromium框架(简称CEF) 是一个由Marshall Greenblatt在2008建立的开源项目,它主要目的是开发一个基于Google Chromium的Webbrowser控件,支持 ...

  7. 微信PC端技术研究(2)-拿下语音

    微信PC端技术研究-保存聊天语音 by anhkgg(公众号:汉客儿) 2019年1月31日 2.6.6.28 0x0. 前言 虽然一直知道CE,也用过一段时间,但一直用不好,可能太笨. 最近又学习了 ...

  8. 微信PC端技术研究(2)-保存聊天语音

    微信PC端技术研究-保存聊天语音 转载地址: [原创]微信PC端技术研究(2)-保存聊天语音-软件逆向-看雪论坛-安全社区|安全招聘|bbs.pediy.com 0x0. 前言 最近又学习了某位大佬用 ...

  9. 调试微信 PC 端的内置浏览器界面

    2021-08-03 最新更新 好久没看,微信也更新了好几版.下面的方法并没有失效,不过上了 3.3.x 后的微信版本已经禁用了右键和查看 chrome://version 的功能了.进过实测,最后一 ...

最新文章

  1. Swift快速入门之getter 和 setter
  2. 雷军做程序员时写的文章,太牛了!
  3. 记录call、apply、bind的源码
  4. CG CTF WEB COOKIE
  5. 网站如何从http升级成https
  6. webbrowser 修改浏览器版本的方法
  7. fun(1),fun(2),fun(3)
  8. matlab连通域分割_MATLAB车牌识别之7个字符切割浅谈【抽丝剥茧】
  9. Android 中文件类型与MIME的匹配表
  10. SQL Server 检测到基于一致性的逻辑 I/O 错误
  11. C# 禁止控件重绘(绘制)
  12. c++项目实例_.NET Core CLI来启动应用程序的多个实例
  13. 【Mybatis】Mybatis三大组件之StatementHandler
  14. resin 配置java_resin安装与配置
  15. linux rescan-scsi-bus.sh,关于rescan-scsi-bus.sh脚本的来历和使用注意事项
  16. 如何比较两个word文档内容是否相同
  17. Win7添加打印机local port端口拒绝访问的解决方法
  18. 2011高校信息化实践者精英论坛之上海交大BI系统汇报
  19. OneNote中英文格式不同,OneNote无法修改英文字体,OneNote默认英文字体为Calibri无法修改的问题。
  20. 微信小程序入门-音乐播放器

热门文章

  1. 2021-12-24
  2. 单片机开发,QY-DPJ12
  3. 数组元素的遍历及数组常用方法-B站晓舟学习报告笔记
  4. 13. keystone v3 方式验证
  5. 机器学习常用数据集免费下载(囊括各类常见数据集近200个)
  6. 东南大学计算机科学培养方案,计算机技术专业学位培养方案-东南大学计算机科学与工程学院.DOC...
  7. 无人机遥感图像拼接与处理,速成方法
  8. 写毕业论文必备的20个网站!
  9. HTML表单处理通过PHP文件输出数据
  10. 微软移除升级Win10补丁 免费已成历史