# winQQ **Repository Path**: Jicklin/winQQ ## Basic Information - **Project Name**: winQQ - **Description**: win32操作QQ发送聊天信息,主要为了QQ群众的QQ小冰的成语接龙 - **Primary Language**: Python - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2018-02-09 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README ## 本代码主要通过python 调用win32向QQ聊天窗口发送内容 ### 主要逻辑 1. spy++工具获取窗口的名称等内容(聊天窗口需要独立) ​ 2. win32定位到窗口 ``` qq=win32gui.FindWindow(None,to_who) ``` > to_who表示窗口的名称 3. 通过`win32gui.SendMessage` 模拟一系列的鼠标键盘操作 ### 遇到的问题 1. 直接向窗口发送文字没反应 直接用`win32gui.SendMessage(qq,win32con.WM_SETTEXT,0,'QQ信息')` 这样的代码发送消息失败,直接将其先放入剪贴板然后再模拟粘贴命令,而且发现将设置剪贴板内容的代码放入一个方法中后,后边的`win32gui.SendMessage(qq,770,0,0)` 粘贴命令无效,无奈只能每个前边都写了一个 2. pyqt5写的界面`time.sleep()` 方法会使得窗口死掉 由于这个是写着为了玩QQ群中的QQ小冰的成语接龙,为啥用pyqt5写页面呢,因为没找到能搜到成语的`api`,发现百度搜索`x开头的成语`,可以搜索到,所以就调用了`splinter` 来进行浏览器的模拟搜索,但是`cmd` 运行的方式搜索一次就会结束了,重启开始测试浏览器还是挺耗时的,所以就在页面的初始化的时候将测试窗口作为一个属性创建存储了起来,这样每次都只调用搜索就可以了。 3. 直接在QQ群众发送`@QQ小冰` 的字符串无效 直接发送字符串貌似只能被当做字符串处理,看起来QQ在输入框中就已经对*@* 进行了处理了,无奈只能先输入`@QQ` 根据建议提示,模拟按`ENter` 进行选择,但是由于没有搞清楚如何让线程休眠等待会,而且感觉重新开个线程费事哈哈,如果直接输入`@QQ` 之后就`Enter` 可能导致还没有选择就已经把`@QQ` 发 出去了,尴尬了,所以他们俩个之间用一些其他的事件进行了隔开 ## 2018-02-09 更新 * 增加对关键字的同音字的匹配,在关键字没搜到的情况下 自动搜索同音字 * 引入`Pinyin2Hanzi` \ `pypinyin` 两个模块 分别用于 拼音-汉字 汉字-拼音