这前看到一篇文件介绍用Python+itchat微信接口实现“远程控制”电脑,最近无聊试了下利用“QQ文件传输助手”可以接收手机端发送的消息原理来写了一个VB.NET(Visual Studio2013)版的,具体实现如下:

一.主要原理是利用了Microsft UI Automation自动化测试技术去获取QQ窗体的句柄

第一步:在VS中引用项目Automation程序集

第二步,在项目中导入

Imports System.Windows.Automation
Imports System.Text.RegularExpressions

第三步,打开QQ文件传输窗体(我事先给它发送一个notepad.exe命令,等会程序将读取到这条消息,并打开“记事本”)

第四步,看代码先用windows api (Findwindow)获取这个窗体的句柄

    Sub Main()        Dim QQHandle As Integer = getQQTransFileHandle("怀念刨地瓜的童年的 Android手机")Dim strMessage() As String = getTextMessage(QQHandle)If strMessage IsNot Nothing ThenDim strLastCmd As String = strMessage(strMessage.Length - 1).ToString.Trim()If Not String.IsNullOrWhiteSpace(strLastCmd) ThenRunCommand(strLastCmd)End IfEnd IfConsole.ReadLine()End Sub''' <summary>''' 先获取QQ传输文件的窗体的句柄''' </summary>''' <param name="title"></param>''' <returns></returns>''' <remarks></remarks>Private Function getQQTransFileHandle(ByVal title As String) As IntegerTryReturn API.FindWindow("TXGuiFoundation", title)Catch ex As ExceptionReturn 0End TryEnd Function

第五步,获取到窗体句柄后,继续 寻找下一级控件句柄,这里说个题外话,QQ等应用程序的窗体  基本上是用DX自绘的窗体如果使用window api  函数(FindWindowEx)是无法获取到窗体中其它控件的句柄消息的,所以这里用 Automation技术,请看代码

将刚刚找到的窗体的句柄传入这个函数来获取到窗体中的"notepad.exe"字符串

​Private Function getTextMessage(ByVal qqhandle As Integer) As String()Dim qqClassName As AutomationElementDim qqMsg() As String = NothingTryDim msgTitleName As AutomationElementDim qqRoot As AutomationElement = AutomationElement.RootElementIf qqhandle > 0 ThenmsgTitleName = AutomationElement.FromHandle(qqhandle)Console.Title = String.Concat(msgTitleName.Current.Name, ",", msgTitleName.Current.ClassName)            End IfDim qqMsgWindow As AutomationElement = qqRoot.FindFirst(TreeScope.Children,New AndCondition(New PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Window),New PropertyCondition(AutomationElement.NameProperty, msgTitleName.Current.Name)))If Not IsNothing(qqMsgWindow) ThenqqClassName = TreeWalker.RawViewWalker.GetFirstChild(qqMsgWindow)qqClassName = TreeWalker.RawViewWalker.GetNextSibling(qqClassName)qqClassName = TreeWalker.RawViewWalker.GetFirstChild(qqClassName)qqClassName = TreeWalker.RawViewWalker.GetNextSibling(qqClassName)qqClassName = TreeWalker.RawViewWalker.GetFirstChild(qqClassName)qqClassName = TreeWalker.RawViewWalker.GetFirstChild(qqClassName)qqClassName = TreeWalker.RawViewWalker.GetNextSibling(qqClassName)qqClassName = TreeWalker.RawViewWalker.GetFirstChild(qqClassName)qqClassName = TreeWalker.RawViewWalker.GetFirstChild(qqClassName)Dim tempMsg As ValuePattern = qqClassName.GetCurrentPattern(ValuePattern.Pattern)Dim MyReg As Regex = New Regex(" ", RegexOptions.Multiline)qqMsg = Regex.Split(MyReg.Replace(tempMsg.Current.Value, Environment.NewLine), Environment.NewLine)qqMsg = qqMsg.Where(Function(s) Not String.IsNullOrEmpty(s)).ToArrayEnd IfCatch ex As ExceptionReturn NothingEnd TryReturn qqMsgEnd Function[点击并拖拽以移动]
​

核心代码到处完成了,这里只是做了一个简单的“抛砖引玉”的功能,只执行了打开"notepad.exe"的命令,有需要的可以自行修改加完善自己需要的功能,全部代码如下:

Imports System.Windows.Automation
Imports System.Text.RegularExpressions
Module Module1Sub Main()        Dim QQHandle As Integer = getQQTransFileHandle("怀念刨地瓜的童年的 Android手机")Dim strMessage() As String = getTextMessage(QQHandle)If strMessage IsNot Nothing ThenDim strLastCmd As String = strMessage(strMessage.Length - 1).ToString.Trim()If Not String.IsNullOrWhiteSpace(strLastCmd) ThenRunCommand(strLastCmd)End IfEnd IfConsole.ReadLine()End Sub''' <summary>''' 先获取QQ传输文件的窗体的句柄''' </summary>''' <param name="title"></param>''' <returns></returns>''' <remarks></remarks>Private Function getQQTransFileHandle(ByVal title As String) As IntegerTryReturn API.FindWindow("TXGuiFoundation", title)Catch ex As ExceptionReturn 0End TryEnd Function''' <summary>''' 获取QQ传输文件消息文本框中的数据''' </summary>''' <param name="qqhandle"></param>''' <returns></returns>''' <remarks></remarks>Private Function getTextMessage(ByVal qqhandle As Integer) As String()Dim qqClassName As AutomationElementDim qqMsg() As String = NothingTryDim msgTitleName As AutomationElementDim qqRoot As AutomationElement = AutomationElement.RootElementIf qqhandle > 0 ThenmsgTitleName = AutomationElement.FromHandle(qqhandle)Console.Title = String.Concat(msgTitleName.Current.Name, ",", msgTitleName.Current.ClassName)            End IfDim qqMsgWindow As AutomationElement = qqRoot.FindFirst(TreeScope.Children,New AndCondition(New PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Window),New PropertyCondition(AutomationElement.NameProperty, msgTitleName.Current.Name)))If Not IsNothing(qqMsgWindow) ThenqqClassName = TreeWalker.RawViewWalker.GetFirstChild(qqMsgWindow)qqClassName = TreeWalker.RawViewWalker.GetNextSibling(qqClassName)qqClassName = TreeWalker.RawViewWalker.GetFirstChild(qqClassName)qqClassName = TreeWalker.RawViewWalker.GetNextSibling(qqClassName)qqClassName = TreeWalker.RawViewWalker.GetFirstChild(qqClassName)qqClassName = TreeWalker.RawViewWalker.GetFirstChild(qqClassName)qqClassName = TreeWalker.RawViewWalker.GetNextSibling(qqClassName)qqClassName = TreeWalker.RawViewWalker.GetFirstChild(qqClassName)qqClassName = TreeWalker.RawViewWalker.GetFirstChild(qqClassName)Dim tempMsg As ValuePattern = qqClassName.GetCurrentPattern(ValuePattern.Pattern)Dim MyReg As Regex = New Regex(" ", RegexOptions.Multiline)qqMsg = Regex.Split(MyReg.Replace(tempMsg.Current.Value, Environment.NewLine), Environment.NewLine)qqMsg = qqMsg.Where(Function(s) Not String.IsNullOrEmpty(s)).ToArrayEnd IfCatch ex As ExceptionReturn NothingEnd TryReturn qqMsgEnd Function''' <summary>''' 运行接收到的命令''' </summary>''' <param name="cmd"></param>''' <returns></returns>''' <remarks></remarks>Private Function RunCommand(ByVal cmd As String) As BooleanTryProcess.Start(cmd)Catch ex As ExceptionReturn FalseEnd TryReturn TrueEnd FunctionEnd Module

下面是运行效果图:

标题

VB.NET + QQ文件助手实现远程控制相关推荐

  1. qq服务器上的文件删除后如何恢复,qq文件过期怎么恢复(过期的QQ文件如何申请恢复)...

    日常工作上,常常会应用QQ来推送文档,很有可能有一些情况下忘掉或太忙而沒有去接受文档,进而造成 QQ文档到期,那麼针对到期的QQ文档应当如何恢复呢?一切正常状况下文档到期了就没有办法修复了,由于是临时 ...

  2. 从QQ同步助手上导出的短信文件*.csv中读取短信,并运用在Qt程序中

    登陆"QQ同步助手"的网页,我们可以将里面的短信信息批量导出到本地存为*.csv文件.该文件可以用Excel打开,看到里面的短信信息.         在用Qt编写一个小程序的时候 ...

  3. 老师助手为什么总是服务器错误,qq老师助手网络拥挤怎么办

    大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. qq老师助手网络拥挤的解决方法: 1.网络的问题,更换稳定的网络尝试. 2.使用qq老师助手的人数过多,达到了网络可容纳量的上限, ...

  4. 局域网限制网速软件_大文件传输工具,比微信、QQ文件传输还好用的传输软件,关键还不限速!...

    白剽一个专注分享各种软件资源的平台 软件名称:文件传输助手 如果你觉得本篇文章对你有帮助,麻烦你给我本篇文章的文末点一个[在看]就是对我最大的帮助,白嫖党和伸手党真的不好,正所谓赠人玫瑰手留余香,我帮 ...

  5. iphone一键转移_iPhone 12换机首选,QQ同步助手一键智能备份迁移

    10月23日,iPhone 12正式上市,许多预订好的用户在同一天就拿到了他们的新手机.在购买新机器后,跨品牌.跨系统的改变已经成为许多用户的难题.据七麦数据显示,iPhone 12发布期间,QQ同步 ...

  6. qq同步android 2.2,QQ同步助手旧版本2.3

    QQ同步助手旧版本2.3是一款可以帮助用户非常方便的解决自己手机的各种问题,用户可以在这里备份自己手机的各种文件资源,可以让用户在换手机的时候非常方便的直接拷贝各种的内容. QQ同步助手旧版本2.3 ...

  7. 腾讯qq珊瑚虫版_QQ for Mac+QQ小助手

    腾讯QQ for mac版是基于Mac OS X平台的即时通讯软件,致力于通过简洁的界面.实用高效的即时沟通功能以及流畅的操作体验,让您充分感受沟通乐趣.其实沟通可以更简单!更是添加了QQ小助手,有消 ...

  8. Fineplus 1.0(QQ完美助手) 正式版

    正式版:Fineplus 1.0(QQ完美助手) FinePlus for QQ2007 辅助软件 一.功能概述: 1.4种形式的IP显示,内建强大的IP格式自定义 2.可选的个性签名显示,还您一个清 ...

  9. Fineplus 0.39(QQ完美助手) 正式版

    正式版:Fineplus 0.39(QQ完美助手) 下载地址: 二合一安装包(最快更新,推荐使用,直接安装即可,安装程序会自动复制文件,并建立快捷方式) 单引导形式压缩包(同珊瑚虫使用方式,二合一版本 ...

最新文章

  1. python 列表生成式、lower()和upper()的使用
  2. 块存储、文件存储、对象存储这三者和分布式文件存储系统的本质区别
  3. Spark Scala语言学习系列之完成HelloWorld程序(三种方式)
  4. 高性能的JavaScript--加载和执行
  5. java -p_javap命令详解 - JackieYeah的个人空间 - OSCHINA - 中文开源技术交流社区
  6. dd命令iso linux_BootISO:从 ISO 文件中创建一个可启动的 USB 设备
  7. Java线程面试题,值得一看!
  8. Hermite多项式(信息学奥赛一本通-T1165)
  9. CVPR2021 用更好的目标检测器提取视觉特征!微软提出VinVL,基于更好的视觉特征,达到更强的多模态性能...
  10. h5 fieldset
  11. Frameworks.Entity.Core 1
  12. ASP.NET编程的十大技巧
  13. POI 读取word (word2003 和 word2007)
  14. AdobeFlashPlayer 安装包
  15. 远程桌面 服务器握手,《易语言远程控制技术教程》第2课_远程桌面(你的桌面我作主)王军...
  16. 在线工具大全,在线办公
  17. 全国各省10米分辨率的土地利用数据的制作与分享
  18. 微信公众号如何分享课件PPT?
  19. npm ERR! code EINVAL npm ERR! EINVAL: invalid argument, read
  20. 美国计算机科学硕士的学制,美国CS专业你知道多少?

热门文章

  1. 开发android电视app
  2. ubuntu安装dingding
  3. [源码解析] 深度学习流水线并行GPipe (2) ----- 梯度累积
  4. TKCORE框架学习之入门篇(十三)--显示格式介绍
  5. java中的\t\r\n\b(Java转义字符)分别是什么?
  6. MT管理器 – 超强的手机文件管理器
  7. php 判断时间是星期几,php如何判断当天星期几
  8. 示例-AT 示例-语音通话
  9. 2023中央财经大学MTI英语翻译硕士专业考研成功经验分享
  10. svn 创建分支、切换分支 及 合并分支 操作