首页 > 编程语言 >【Python项目】用pywin32在聊天窗口发送QQ好友/群消息

【Python项目】用pywin32在聊天窗口发送QQ好友/群消息

时间:2024-12-24 21:53:34浏览次数:7  
标签:QQ EM 窗口 控件 Python pywin32 指定 文本 ES

源码中涉及到的函数用法:

win32clipboard.SetClipboardData(format, hMem):它需要一个格式化的数据对象和一个数据块。

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格式的字符串。

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

win32gui.ShowWindow(hWnd, cmdShow)它的作用是显示或隐藏窗口并更改其状态。这个函数有两个参数

窗口句柄(hWnd):这是一个整数,代表要操作的窗口。

显示状态命令(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。

SendMessage(HWND hWnd,UINT Msg,WPARAM wParam,LPARAM IParam)

参数

hWnd:指定要接收消息的窗口的句柄。如果此参数为HWND_BROADCAST,则消息将被发送到系统中所有顶层窗口,包括无效或不可见的非自身拥有的窗口、被覆盖的窗口和弹出式窗口,但消息不被发送到子窗口。

Msg:指定被发送的消息。

wParam:指定附加的消息特定信息。

IParam:指定附加的消息特定信息。

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

源码如下:

import win32gui
import win32con
import win32clipboard as w
import time

def send_qqmsg(qq_name, qq_msg):
    # 打开剪贴板
    w.OpenClipboard()
    # # 清空剪贴板
    w.EmptyClipboard()
    # 设置剪贴板内容
    w.SetClipboardData(win32con.CF_UNICODETEXT, qq_msg)
    # 获取剪贴板内容
    date = w.GetClipboardData()
    # 关闭剪贴板
    w.CloseClipboard()
    # 获取qq窗口句柄
    handle = win32gui.FindWindow(None, qq_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)

if __name__ == '__main__':
    win_name = '我的Python教程'  # QQ聊天窗口的名字
    print('开始')
    for i in range(1, 7):
        send_qqmsg(win_name, '这是第' + str(i) + '个测试消息')
    print('结束')

常用编辑控件常量

EC_LEFTMARGIN EC_USEFONTINF 设置左边距时使用

EC_RIGHTMARGIN EC_USEFONTINF 设置右边距时使用

EC_USEFONTINF,O, 边距 设置编辑控件的左、右边距,当wParam含EC_LEFTMARGIN时在lParam的低16位指定左边距点数,当wParam含EC_RIGHTMARGIN时在lParam的高16位指定右边距点数。当指定wParam为EC_USEFONTINFO时,则用当前字体的字符"A"的宽度指定右边距和字符"C"的宽度指定左边距lParam被忽略。

EM_CHARFROMPOS(&HD7=215),0, 取得编辑控件中指定位置的字符相对于文本头部的偏移量。使用本操作应先在第4个参数的高16位指定行号,低16位指定列号(或一个POINTAPI结构),行列是按编辑控件的客户区左上角为原点(0,0)计算的。如果指定的位置超出控件客户区则返回-1

EM_CANUNDO(&HC6=198),0,0   决定前一次编辑操作是否能够撤消:检测控件撤消缓冲区是否为空,通常控件把最后一次在控件的编辑操作保存在一个撤消缓冲区,如果缓冲区非空则返回TRUE表示上次操作可以撤消,否则返回FALSE,应用程序可以利用该返回值来禁止或允许菜单或工具条的"撤消"项。

EM_EMPTYUNDOBUFFER(&HCD=205 ),0,0 清除控件的撤消缓冲区,使其不能撤消前一次编辑操作

EM_FMTLINES(&HC8=200)   决定是否在取回的文本宇串中包含软回车字符

EM_GETFIRSTVISIBLEINE(&HCE=206),0,0 获得文本控件中处于可见位置的最顶部的文本所在的行号

EM_GETLINE(&HC4=196 ),行号,ByVal 变量 获取编辑控件某一行的内容,变量须预先赋空格

EM_GETLINECOUNT(&HBA=186),0,0 获取编辑控件的总行数

EM_GETMODIFY(&HB8=184),0,0  判断编辑控件的内容是否已发生变化,返回TRUE则控件文本已被修改,返回FALSE则未变。

EM_GETPASSWORDCHAR( ),0,0  获取编辑控件的密码字符,返回NULL表示没有字符

EM_GETRECT(&HB2=178),0,结构   获取编辑控件的格式化矩形

EM_GETTHUMB(&HBE=190),0,0 取得多行文本编辑控件的滚动框的当前位置(注意:是象素值)

EM_GETSEL(&HB0=176),0,变量 获取光标位置(以字节数表示),或:(缓冲区起点,缓冲区终点)取得编辑控件中选定内容的范围,返回值中低16位为起点,高16位为终点

EM_GETHANDLE(&HBD=189),0,0 取得文本缓冲区

EM_GETWORDBREAKPROC(&HD1=209),0,0 取得整字换行回调函数EditWordBreakProc指针

EM_GETLIMITTEXT(WM_USER+37=1061),0,0 获取一个编辑控件中文本的最大长度

EM_GETMARGINS( ),0,0 获取编辑控件的左、右边距,返回值低16位为左边距,高16位为右边距(不得用于NT3.51)

EM_LIMITTEXT(&HC5=197),最大值,0 设置编辑控件中的文本长度

EM_SCROLLCARET(&HB7=183),0,0 把可见范围移至光标处

EM_LINEFROMCHAR(&HC9=201),偏移值,0 获取指定位置(或:-1,0 表示光标位置)所在的行号

EM_LINEINDEX(&HBB=187),行号,0 获取指定行(或:-1,0 表示光标所在行)首字符在文本中的位置(以字节数表示)

EM_LINELENGTH(&hC1=193),偏移值,0 获取指定位置所在行(或:-1,0 表示光标所在行)的文本长度(以字节数表示)

EM_POSFROMCHARPOINT,结构地址,偏移值 取得指定字符位置的行列号,偏移值是字符相对于文本头部的偏移。

EM_LINESCROLL(&HB6=182),列数,行数 指定行数的文本水平滚动,每次滚动N列

EM_EXGETSEL(&H434=1076)

EM_EXSETSEL(&H437=1079),0,结构 RichEdit控件设置文本选定范围,参阅 EM_SETSEL 消息,结构是指 CHARRANGE 结构

EM_PASTESPECIAL(&H440=1088),2(1),1 RichEdit控件粘贴剪贴板中的位图(或文本)

EM_FINDTEXT(&H738=1080) RichEdit控件正文搜索操作

EM_FINDTEXTEX(&H44F=1103) 同上

EM_SETTEXTEX(&H461=1121) RichEdit控件正文替换/插入操作

EM_SETTARGETDEVICE, GetDC(RichText.hWnd), RichText.Width / 15)设置 RichTextBox 自动换行,后续代码是:RichText.RightMargin = iif(RichText.RightMargin = 0,1,0)

EM_SETTARGETDEVICE, 0, 1 设置 RichTextBox 不自动换行

EM_POSFROMCHAR(&HD6或&H426) 判断指定字符在编辑控件的位置(用于NT3.51)

EM_SCROLL(&HB5=181),,0 文本垂直滚动。第三个参数控制滚动方向:SB_LINEDOWN(1)向下滚动一行,SB_LINEUP(0)向上滚动一行,SB_PAGEDOWN(3)向下滚动一页,SB_PAGEUP(2)向上滚动一页。

EM_REPLACESEL(&HC2=194),1(0), 字符串 用指定字符串替换编辑控件中的当前选定内容,如果第三个参数wParam为1,则本次操作允许撤消,0禁止撤消。字符串可用传值方式,也可用传址方式(例:SendMessage Text1.hwnd, EM_REPLACESEL, 0, Text2.Text '这是传值方式)

EM_SETSEL(&HB1=177), 起点,终点 设置编辑控件中文本选定内容范围(或设置光标位置),该范围被反相显示,用于为复制、替换、粘贴、剪切、删除等编辑功能指定范围,光标将被移至指定的终点后面。还可使用指定相同起点和终点来移动光标而不是选定范围。当指定的起点等于0和终点等于-1时,文本全部被选中,此法常用在清空编辑控件。当指定的起点等于-2和终点等于-1时,全文均不选,光标移至文本未端,此法常用在文本未端追加内容。注意:当控件没有输入焦点时,本操作将会失败,一般在执行本操作前都应调用SetFocus先取得输入焦点。

EM_UNDO(&HC7=199),0,0 撤消前一次编辑操作,当重复发送本消息,控件将在撤消和恢复中来回切换

EM_SETCHARFORMAT(&H444) 改变选定文本的颜色

EM_SETHANDLE(&HBC=188),缓冲区指针,0 为编辑控件指定新的文本缓冲区。此操作仅适用对话框创建带DS_LOCALEDIT风格的控件。

EM_SETLIMITTEXT,长度(字节),0 设置编辑控件中的文本最大长度(不得用于NT3.51)

EM_SETMARGINS(&HD3=211) 设置编辑控件的左、右边距(不得用于NT3.51)

EM_SETMODIFY(&HB9=185),1(0),0 设置或清除一个编辑控件的修改标志

EM_SETPASSWORDCHAR(&HCC=204),字符,0 指定控件用来显示密码的字符,缺省为"*"。当第三个参数wParam为0时,本操作将清除控件的ES_PASSWORD风格,并按实际字符显示。

EM_SETREADONLY(&HCF=207),1(0),0 决定是否将编辑控件设为只读,同时决定控件的ES_READONLY风格

EM_SETRECT(&HB3=179),0(或RECT),结构地址 为一个编辑控件设置格式化矩形

EM_SETRECTNP(&HB4=180),0(或RECT),结构地址 为一个编辑控件设置格式化矩形,只是控件此时不会重画

EN_CHANGE(&H300=768) 编辑控件的内容发生改变。与EN_UPDATE不同,该消息是在编辑框显示的正文被刷新后才发出的。

EN_ERRSPACE(&H500=1280) 任何时候只要由于内存不足以完成一项编辑操作

EN_HSCROLL(&H601=1537) 用户单击了编辑控件的水平滚动条。注意:这条消息是在控件更新显示之前发送出去的。

EN_VSCROLL(&H602=1538) 用户单击了编辑控件的垂直滚动条。注意:这条消息是在控件更新显示之前发送出去的。

EN_KILLFOCUS(&H200=512) 编辑控件失去了输入焦点

EN_SETFOCUS(&H100=256) 编辑控件获得了输入焦点

EN_UPDATE(&H400=1024) 控件准备显示改变了的正文时发送该消息。它与EN_CHANGE通知消息相似,只是它发生于更新文本显示出来之前。

EN_MAXTEXT(&H501=1281) 用户输人的文字数超出由EM_LIMITTEXT消息规定的界限,或超出由VB Maxlength属性规定的界限,就会发送这条消息 。此外,倘若不允许自动进行水平滚动,同时插入点要超出控件的宽度;或者不允许自动垂直滚动,同时插入点要超出控件的高度,那么也会触发这条消息。在没有 ES_AUTOHSCROLL或ES_AUTOVSCROLL的编辑框中,当正文超出了编辑框的边框时也会发出该消息。

编辑风格消息

ES_MULTILINE   指定编辑控件能否进行多行文本编辑,若多行编辑器不指定ES_AUTOHSCROLL风格,则会自动换行,用户每按一次Enter,在当前光标处输入一个回车换行符(0Dh,0Ah),文本增加一行。若不指定ES_AUTOVSCROLL,则多行编辑器会在窗口中正文装满时发出警告声响。

ES_LEFT 文本显示居左。

ES_CENTER  文本显示居中。

ES_RIGHT  文本显示居右。

ES_LOWERCASE  把用户输入的字母统统转换成小写字母。

ES_UPPERCASE  把用户输入的字母统统转换成大写字母。

ES_OEMCONVERT  把输入的文本从ANSI码转换成OEM码,然后又转换成ANSI码,目的是保证函数AnsiToOem的正确调用。这在编辑框中包含文件名时是很有用的。

ES_AUTOHSCROLL(自动增加水平滚动条) 当用户在行尾键入一个字符时,正文将自动向右滚动10个字符,当用户按回车键时,正文总是滚向左边。

ES_AUTOVSCROLL  当用户在最后一个可见行按回车键时,正文向上滚动一页。

ES_NUMBER  只接收数码输入,其它字符输入一律无效。

ES_NOHIDESEL(&H100=256) 当编辑框失去输入焦点时,选中的文本将隐藏,正文中的选择保持不变。缺省时正文中的选择将失效,当获得输入焦点后才又显示出来。

ES_READONLY  将编辑框设置成只读的。

ES_PASSWORD(&H20=32) 使所有键入的字符都用"*"来显示。

ES_WANTRETURN  使多行编辑器接收回车键输入并换行。如果不指定该风格,按回车键会选择缺省的命令按钮,这往往会导致对话框的关闭。

列表框操作

LB_FINDSTRING(&H18F=399),-1,ByVal 字串 查找列表项的字符串,返回值=字符串所在的列表项的索引。-1表示从第0行开始查找,如果改为一个有效的列表项索引值,将从该行开始查找。

LB_ITEMFROMPOINT(&H1A9=425) 获取光标所在的列表项的索引

LB_SETHORIZONTALEXTENT(&H194=404),长度,0 设置列表框的横向滚动条以及滚动长度,长度为象素值

组合框操作

CB_SHOWDROPDOWN(&H14F),1(0),0 打开(关闭)组合框的列表

TVM_SETBKCOLOR(&H1100+29=4381) 设置扩展树型列表控件的背景色(TVM开头的常数)

常用窗口消息

WM_GETFONT(&H31=49) 得到当前控件绘制文本的字体(的句柄)

WM_GETTEXT(&HD=13),变量长度,变量 取得窗体的标题,变量须预先赋空字串(chr(0),变量长度=Len(变量)

WM_SETTEXT(&HC=12),0,ByVal "字串" 设置窗体的标题

WM_NCLBUTTONDOWN(&HA1=161),2,0 在非客户区,即边框及标题栏上(假如定义的是一个组件,则非客户区包括Form等)按下鼠标左键;

WM_LBUTTONDOWN(&H201=513),2,0 在客户区,也就是除边框及标题栏以外按下鼠标左键

WM_VSCROLL(&H115=277),&H10000*p+SB_THUMBPOSITION(&H4),0 同步滚动文本,p是位置改变量

WM_PAINT

WM_USER(&H400=1024)

WM_CUT(&H300=768),0,0 剪切

WM_COPY(&H301=769),0,0 复制

WM_PASTE(&H302=770),0,0 粘贴

WM_CLEAR(&H303=771),0,0 删除

WM_UNDO(&H304=772),0,0 撤消

按钮消息

BM_SETSTYLE(&HF4) 设置按纽样式

BS_RADIOBUTTON(&H4) 收音机旋纽式的按纽,是 BM_SETSTYLE 使用的参数

原创 作者一小红牛 我的Python教程

标签:QQ,EM,窗口,控件,Python,pywin32,指定,文本,ES
From: https://www.cnblogs.com/o-O-oO/p/18628764

相关文章

  • 【python量化教程】如何使用必盈股票API接口,获取最新实时交易数据
      一篇文章教会什么是股票量化分析   股票API接口作为一种应用程序编程接口,犹如在股票数据的提供者与使用者之间架起的一座沟通桥梁。股票市场环境错综复杂,其中蕴含着海量数据,例如股票实时价格、历史价格变动轨迹以及成交量等信息。借助股票API接口,有获取数据需......
  • Python+Vue3+Django银行信用卡额度管理系统的设计与实现
    文章目录具体实现截图项目介绍和开发技术介绍开发技术核心代码部分展示项目结构分析文章目录/写作提纲参考源码/演示视频获取方式具体实现截图项目介绍和开发技术介绍创新之处(1)系统资源闭环整合,实现了综合功能高度集成。(2)采用DJANGO框架,开发软件更加方便、......
  • Python+Vue3+Django新闻发布管理系统设计与实现
    文章目录具体实现截图项目介绍和开发技术介绍开发技术核心代码部分展示项目结构分析文章目录/写作提纲参考源码/演示视频获取方式具体实现截图项目介绍和开发技术介绍创新之处(1)系统资源闭环整合,实现了综合功能高度集成。(2)采用DJANGO框架,开发软件更加方便、......
  • 医院食堂订餐系统Python+Vue3+Django(Pycharm毕业设计 mysql)
    文章目录具体实现截图项目介绍和开发技术介绍开发技术核心代码部分展示项目结构分析文章目录/写作提纲参考源码/演示视频获取方式具体实现截图项目介绍和开发技术介绍创新之处(1)系统资源闭环整合,实现了综合功能高度集成。(2)采用DJANGO框架,开发软件更加方便、快......
  • nodepadd++ run python script
    原文链接:[https://www.quora.com/Can-you-run-Python-in-Notepad]Firstoption:(Easiest,recommended)OpenNotepad++.Onthemenugoto:Run->Run..(F5).Typein:C:\Python26\python.exe"$(FULL_CURRENT_PATH)"Now,insteadofpressingrun,press......
  • python query oracle database
    oraclesqlscript:droptableIFEXISTSGEOVINDU.School;createtableGEOVINDU.School--創建表(SchoolIdchar(5)NOTNULL,--SchoolNamevarchar(500)NOTNULL,SchoolTelNovarchar(8)NULL,PRIMARYKEY(SchoolId)--#主鍵);......
  • 【Python完全零基础入门教程】 Python3.7.7完全安装与卸载 免费教程!
    ......
  • 文字游戏——“改写”文本(中文•Python)
    调整语序、增减字数、替换同义词等方式,避免与原文出现连续八个字相同的句子,使这段话更加有逻辑。(笔记模板由python脚本于2024年12月23日12:23:12创建,本篇笔记适合喜欢中文的coder翻阅)【学习的细节是欢悦的历程】Python官网:https://www.python.org/Free:大咖......
  • ZeroMQ的使用(python)
    ZeroMQ的使用(python)1.python环境使用1.1非源码安装在安装pyzmq和libzmq3-devel之后便可以使用zeromq了。需要提前安装好python环境。(venv-patroni-4.0.3)[fbase@localhostzmq]$mkdir~/soft/zmq(venv-patroni-4.0.3)[fbase@localhostzmq]$cd~/soft/zmq(venv-pat......
  • python毕设 闲鱼交易平台程序+论文
    本系统(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。系统程序文件列表开题报告内容一、选题背景关于闲鱼交易平台的研究,现有研究主要以其商业模式和用户行为为主,专门针对用Python构建闲鱼交易平台的研究较少。随着互联网的迅速发展......