ExcelHome技术论坛

 找回密码
 免费注册

QQ登录

只需一步,快速开始

快捷登录

搜索
EH技术汇-专业的职场技能充电站 妙哉!函数段子手趣味讲函数 Excel服务器-会Excel,做管理系统 Excel Home精品图文教程库
HR薪酬管理数字化实战 Excel 2021函数公式学习大典 Excel数据透视表实战秘技 打造核心竞争力的职场宝典
300集Office 2010微视频教程 数据工作者的案头书 免费直播课集锦 ExcelHome出品 - VBA代码宝免费下载
用ChatGPT与VBA一键搞定Excel WPS表格从入门到精通 Excel VBA经典代码实践指南
查看: 4691|回复: 15

[求助] 【分享】EXCEL VBA使用PC版微信收发信息

[复制链接]

TA的精华主题

TA的得分主题

发表于 2019-9-19 23:42 | 显示全部楼层 |阅读模式
[广告] Excel易用宝 - 提升Excel的操作效率 · Excel / WPS表格插件       ★免费下载 ★       ★ 使用帮助
本帖最后由 LeverHz 于 2019-9-21 20:40 编辑

EXCEL控制PC微信给手机微信收发文本信息的接口。调试了好几天,在WIN10、office2019上测试通过。
大家若觉得好用,点个赞。

' 用于ms级占用CPU延时
Private Declare Function timeGetTime Lib "winmm.dll" () As Long
' 控制鼠标
Public Declare Function SetCursorPos Lib "user32" (ByVal x As Long, ByVal y As Long) As Long
Public Declare Sub mouse_event Lib "user32" (ByVal dwFlags As Long, ByVal dx As Long, ByVal dy As Long, ByVal cButtons As Long, ByVal dwExtraInfo As Long)


' 延时设置
Public Const DRV_MAX_DELAY_MS   As Long = 60000          ' 最大延时1分钟
Public Const CELL_WC_MSG_BUF        As String = "B32"
Public Const WC_MSG_TGT             As String = "ABC"   '微信窗口名称,一般为好友的昵称


'********************************************************************
' 将文本拷贝到剪切板中
'********************************************************************
Private Function DRV_CopyText2Clipboard(vText As String)
    Dim MSForms_DataObject As Object
    Set MSForms_DataObject = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")      '创建剪切板对象
    MSForms_DataObject.SetText vText
    MSForms_DataObject.PutInClipboard
    Set MSForms_DataObject = Nothing
    DRV_CopyText2Clipboard = ""
End Function
'********************************************************************
' 从剪切板中获取文本
'********************************************************************
Private Function DRV_GetTextFromClipboard() As String
    Dim vMsg As String
   
    Dim MSForms_DataObject As Object
    Set MSForms_DataObject = CreateObject("new:{1C3B4210-F441-11CE-B9EA-00AA006B1A69}")     '创建剪切板对象
    MSForms_DataObject.GetFromClipboard
    DRV_GetTextFromClipboard = MSForms_DataObject.GetText
   
    Set MSForms_DataObject = Nothing
End Function

Sub TEST_GetTextFromClipboard()
    Debug.Print DRV_GetTextFromClipboard()
End Sub

'********************************************************************
' 清空剪切板
'********************************************************************
Private Function DRV_ClearClipboard()
'    Sheets(SHT_NAME_CONFIG).Activate
'    Range(CELL_WC_MSG_BUF).Clear
'    Range(CELL_WC_MSG_BUF).Select
    Dim vMsg As String
    vMsg = ""
    DRV_CopyText2Clipboard vMsg
    DRV_ClearClipboard = ""
End Function
'********************************************************************
' 增加时间戳和前后缀
'********************************************************************
Private Function DRV_MsgAddPrefix(vText As String) As String
    Dim vRet As String
    vRet = "#** " & Now() & Chr(10) & vText & Chr(10) & "**#"
'    vRet = "#** " & Now() & Chr(10) & vText & Chr(10) & "**#" & Chr(10)
   
    DRV_MsgAddPrefix = vRet
End Function

Sub TEST_CopySelection2Clipboard()
    DRV_CopyText2Clipboard DRV_MsgAddPrefix(Selection.Text)
End Sub

'********************************************************************
' 使用微信发发送信息
' vTargetWindowName As String           目标窗口名称
' vMsgCell As String                    要发送的信息文本,本函数会追加前后缀
'********************************************************************
Private Function DRV_SendWCMsg(vTargetWindowName As String, vMsg As String)
    Dim vSht As Worksheet
    Dim vName As String
    vName = ActiveSheet.Name
    Sheets(SHT_NAME_CONFIG).Activate
    Range(CELL_WC_MSG_BUF).Value = vMsg
    Range(CELL_WC_MSG_BUF).Select
    DRV_CopyText2Clipboard DRV_MsgAddPrefix(Selection.Text)
   
    Dim oWS
    Set oWS = CreateObject("Wscript.shell")
    oWS.AppActivate vTargetWindowName
    DRV_MsDelay 500
    SendKeys "^V"
    DRV_MsDelay 100
    SendKeys "~~"
    DRV_MsDelay 100
    Sheets(vName).Activate
    DRV_SendWCMsg = ""
End Function
Sub TEST_SendSelection2WC()
    Call DRV_SendWCMsg(WC_MSG_TGT, Selection.Text)
End Sub
'********************************************************************
' 模拟鼠标操作,sleep函数不好用
'********************************************************************
Private Function DRV_GetWCMsgOperateKM()
    '移动到最新一条消息上面,右键调出复制窗口
    SetCursorPos 2100, 1220
    DRV_MsDelay (100)
    mouse_event MOUSEEVENTF_RIGHTDOWN, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_RIGHTUP, 0, 0, 0, 0
    DRV_MsDelay (100)
    '移动到复制按钮上,左键点击复制
    SetCursorPos 2120, 1240
    DRV_MsDelay (100)
    mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
    DRV_MsDelay (100)
    '移动到发送消息窗口处,恢复环境
    SetCursorPos 2120, 1340
    DRV_MsDelay (100)
    mouse_event MOUSEEVENTF_LEFTDOWN, 0, 0, 0, 0
    mouse_event MOUSEEVENTF_LEFTUP, 0, 0, 0, 0
    DRV_MsDelay (100)
End Function

'********************************************************************
' 接收微信发送过来的消息
' 预置条件: 打开微信窗口,将目标微信窗口挪到右下角. 让收到的第一条消息正好处于预设的位置
' 限制较大,后续需要考虑替代
' TODO: 考虑出现屏保,显示器关闭的情况
'********************************************************************
Private Function DRV_GetWCMsg() As String
    Call DRV_ClearClipboard
    Call DRV_GetWCMsgOperateKM
    DRV_GetWCMsg = DRV_GetTextFromClipboard()
End Function

' 获取微信消息,并回应一条消息
Sub TEST_GetWCMsg()
    Dim vMsg As String
    vMsg = DRV_GetWCMsg()
    If "" = vMsg Then
        vMsg = Now() & " Get Nothing from WX"
    Else
        vMsg = Now() & " Get Msg from WX: " & Chr(10) & vMsg
    End If
   
    Debug.Print vMsg
   
    DRV_SendWCMsg WC_MSG_TGT, vMsg
      
End Sub


'更好的办法是使用timeGetTime函数,timeGetTime函数返回的是开机到现在的毫秒数,可以支持1毫秒的间隔时间,而且永远增加,不存在回头的问题。
'当然不是永远不回头,毕竟Long型变量(双字,4字节)也是有取值范围的,这个值在0到2^32之间。大约49.71天。
'********************************************************************
' MS级延时.
'********************************************************************
Private Function DRV_MsDelay(vDelay As Long)
    Dim vTimeStart As Long
   
    vTimeStart = timeGetTime
   
    If vDelay > DRV_MAX_DELAY_MS Then
        vDelay = DRV_MAX_DELAY_MS
    End If
   
    Do
        DoEvents
    Loop While timeGetTime - vTimeStart < vDelay
End Function

TA的精华主题

TA的得分主题

发表于 2019-9-20 05:54 来自手机 | 显示全部楼层
业务量大,还是自己搞个服务器吧,这种外挂方式还是有一定局限性的。

TA的精华主题

TA的得分主题

发表于 2019-9-20 14:02 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-9-20 14:12 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-9-20 14:34 来自手机 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
pc版就是开发出来也不稳定啊,如果Android手机版能用,肯定稳定多了。

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-21 16:18 | 显示全部楼层
本帖最后由 LeverHz 于 2019-9-21 20:46 编辑

已合并。。。。。。。。。。
011.small.gif

TA的精华主题

TA的得分主题

 楼主| 发表于 2019-9-21 20:33 | 显示全部楼层
本帖最后由 LeverHz 于 2019-9-21 20:45 编辑

已合并。。。。。。。。。

TA的精华主题

TA的得分主题

发表于 2019-9-21 23:36 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-10-16 17:42 | 显示全部楼层

TA的精华主题

TA的得分主题

发表于 2019-10-16 17:44 | 显示全部楼层
[广告] VBA代码宝 - VBA编程加强工具 · VBA代码随查随用  · 内置多项VBA编程加强工具       ★ 免费下载 ★      ★使用手册
本帖最后由 我在天外 于 2019-10-16 17:50 编辑

真的厉害,要膜拜一下
您需要登录后才可以回帖 登录 | 免费注册

本版积分规则

关闭

最新热点上一条 /1 下一条

手机版|关于我们|联系我们|ExcelHome

GMT+8, 2024-4-25 06:24 , Processed in 0.048733 second(s), 9 queries , Gzip On, MemCache On.

Powered by Discuz! X3.4

© 1999-2023 Wooffice Inc.

沪公网安备 31011702000001号 沪ICP备11019229号-2

本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任!     本站特聘法律顾问:李志群律师

快速回复 返回顶部 返回列表