VB.NET + QQ文件助手实现远程控制
这前看到一篇文件介绍用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文件助手实现远程控制相关推荐
- qq服务器上的文件删除后如何恢复,qq文件过期怎么恢复(过期的QQ文件如何申请恢复)...
日常工作上,常常会应用QQ来推送文档,很有可能有一些情况下忘掉或太忙而沒有去接受文档,进而造成 QQ文档到期,那麼针对到期的QQ文档应当如何恢复呢?一切正常状况下文档到期了就没有办法修复了,由于是临时 ...
- 从QQ同步助手上导出的短信文件*.csv中读取短信,并运用在Qt程序中
登陆"QQ同步助手"的网页,我们可以将里面的短信信息批量导出到本地存为*.csv文件.该文件可以用Excel打开,看到里面的短信信息. 在用Qt编写一个小程序的时候 ...
- 老师助手为什么总是服务器错误,qq老师助手网络拥挤怎么办
大家好,我是时间财富网智能客服时间君,上述问题将由我为大家进行解答. qq老师助手网络拥挤的解决方法: 1.网络的问题,更换稳定的网络尝试. 2.使用qq老师助手的人数过多,达到了网络可容纳量的上限, ...
- 局域网限制网速软件_大文件传输工具,比微信、QQ文件传输还好用的传输软件,关键还不限速!...
白剽一个专注分享各种软件资源的平台 软件名称:文件传输助手 如果你觉得本篇文章对你有帮助,麻烦你给我本篇文章的文末点一个[在看]就是对我最大的帮助,白嫖党和伸手党真的不好,正所谓赠人玫瑰手留余香,我帮 ...
- iphone一键转移_iPhone 12换机首选,QQ同步助手一键智能备份迁移
10月23日,iPhone 12正式上市,许多预订好的用户在同一天就拿到了他们的新手机.在购买新机器后,跨品牌.跨系统的改变已经成为许多用户的难题.据七麦数据显示,iPhone 12发布期间,QQ同步 ...
- qq同步android 2.2,QQ同步助手旧版本2.3
QQ同步助手旧版本2.3是一款可以帮助用户非常方便的解决自己手机的各种问题,用户可以在这里备份自己手机的各种文件资源,可以让用户在换手机的时候非常方便的直接拷贝各种的内容. QQ同步助手旧版本2.3 ...
- 腾讯qq珊瑚虫版_QQ for Mac+QQ小助手
腾讯QQ for mac版是基于Mac OS X平台的即时通讯软件,致力于通过简洁的界面.实用高效的即时沟通功能以及流畅的操作体验,让您充分感受沟通乐趣.其实沟通可以更简单!更是添加了QQ小助手,有消 ...
- Fineplus 1.0(QQ完美助手) 正式版
正式版:Fineplus 1.0(QQ完美助手) FinePlus for QQ2007 辅助软件 一.功能概述: 1.4种形式的IP显示,内建强大的IP格式自定义 2.可选的个性签名显示,还您一个清 ...
- Fineplus 0.39(QQ完美助手) 正式版
正式版:Fineplus 0.39(QQ完美助手) 下载地址: 二合一安装包(最快更新,推荐使用,直接安装即可,安装程序会自动复制文件,并建立快捷方式) 单引导形式压缩包(同珊瑚虫使用方式,二合一版本 ...
最新文章
- python 列表生成式、lower()和upper()的使用
- 块存储、文件存储、对象存储这三者和分布式文件存储系统的本质区别
- Spark Scala语言学习系列之完成HelloWorld程序(三种方式)
- 高性能的JavaScript--加载和执行
- java -p_javap命令详解 - JackieYeah的个人空间 - OSCHINA - 中文开源技术交流社区
- dd命令iso linux_BootISO:从 ISO 文件中创建一个可启动的 USB 设备
- Java线程面试题,值得一看!
- Hermite多项式(信息学奥赛一本通-T1165)
- CVPR2021 用更好的目标检测器提取视觉特征!微软提出VinVL,基于更好的视觉特征,达到更强的多模态性能...
- h5 fieldset
- Frameworks.Entity.Core 1
- ASP.NET编程的十大技巧
- POI 读取word (word2003 和 word2007)
- AdobeFlashPlayer 安装包
- 远程桌面 服务器握手,《易语言远程控制技术教程》第2课_远程桌面(你的桌面我作主)王军...
- 在线工具大全,在线办公
- 全国各省10米分辨率的土地利用数据的制作与分享
- 微信公众号如何分享课件PPT?
- npm ERR! code EINVAL npm ERR! EINVAL: invalid argument, read
- 美国计算机科学硕士的学制,美国CS专业你知道多少?