c# 获取QQ聊天框信息,自动发送与回复!非Hook
来源:互联网 发布:人工智能在企业的应用 编辑:程序博客网 时间:2024/04/30 02:15
用了二天的时间终于实验成果!从QQ6.6版到现在的QQ概念版。。
因为QQ使用了无句柄窗口,所以无法通过句柄来操作。从网上搜索了半天都是老版本的,从一个帖子中偶然发现了UI Automation,可用于UI自动化测试.
效果如下:
#代码由http://my.csdn.net/my/mycsdn 修改而来
//获取聊天内容
Process[] process = Process.GetProcessesByName("QQConcept");
//获取根节点
AutomationElement aeTop = AutomationElement.RootElement;
foreach (Process p in process)
{
if (p.MainWindowHandle != null)
{
//查找窗体名
AutomationElement aeForm = aeTop.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, textBox1.Text));
if (aeForm != null)
{
//寻找类型为Document的控件。在ui spy里可以查看到
AutomationElementCollection aeAllEdit = aeForm.FindAll(TreeScope.Subtree, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Document));
Thread.Sleep(1000);
for (int i = 0; i < aeAllEdit.Count; i++)
{
try
{
//判断控件ID
if (aeAllEdit[i].Current.AutomationId == "OutputBox")
{
TextPattern textpatternPattern = aeAllEdit[i].GetCurrentPattern(TextPattern.Pattern) as TextPattern;
if (textpatternPattern != null)
{
//获取控件内的文本
string result = textpatternPattern.DocumentRange.GetText(-1);
result = result.Replace("", "");
result = result.Replace("\r", "\r\n");
SetMSG(result);
//将文本框滚动条自动滑到最新一行
Invoke(new MethodInvoker(delegate()
{
Rtb_QQMsg.SelectionStart = Rtb_QQMsg.TextLength;
Rtb_QQMsg.ScrollToCaret();
}));
}
}
}
catch
{
SetState("没有找到正确的消息资源~!");
}
}
}
else
{
// zt("当前没有打开的QQ聊天窗口~!");
}
}
else
{
SetState("没有找到QQ程序,是否已启动?");
}
}
#发送
private void sendqq()
{
SetState("");
Process[] process = Process.GetProcessesByName("QQConcept");
AutomationElement aeTop = AutomationElement.RootElement;
foreach (Process p in process)
{
if (p.MainWindowHandle != null)
{
AutomationElement aeForm = aeTop.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, textBox1.Text));
if (aeForm != null)
{
AutomationElementCollection aeAllEdit = aeForm.FindAll(TreeScope.Subtree, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Document));
Thread.Sleep(100);
for (int i = 0; i < aeAllEdit.Count; i++)
{
try
{
if (aeAllEdit[i].Current.AutomationId == "InputBox")
{
//先发送文本,后寻找发送按钮模拟点击
aeAllEdit[i].SetFocus();
System.Windows.Forms.SendKeys.SendWait(textBox2.Text);
//在UI目录树中找到TXGuiFoundation
AutomationElement aeForm1 = aeTop.FindFirst(TreeScope.Children, new PropertyCondition(AutomationElement.NameProperty, textBox1.Text));
if (aeForm1 != null)
{
AutomationElementCollection aeAllEdit1 = aeForm1.FindAll(TreeScope.Subtree, new PropertyCondition(AutomationElement.ControlTypeProperty, ControlType.Button));
Thread.Sleep(100);
for (int t = 0; t < aeAllEdit1.Count; t++)
{
try
{
if (aeAllEdit1[t].Current.AutomationId == "send")
{
InvokePattern ipClickButton1 = (InvokePattern)aeAllEdit1[t].GetCurrentPattern(InvokePattern.Pattern);
ipClickButton1.Invoke();
break;
}
}
catch
{
SetState("没有找到正确的消息资源~!");
}
}
}
}
}
catch
{
SetState("没有找到正确的消息资源~!");
}
}
}
else
{
// zt("当前没有打开的QQ聊天窗口~!");
}
}
else
{
SetState("没有找到QQ程序,是否已启动?");
}
}
}
通过获取回来的文本就可以做自动回复了,判断前后文本框的差值就可以获取别人发送的信息。。过滤后就可以按照内容自动回复。。
- c# 获取QQ聊天框信息,自动发送与回复!非Hook
- 获取QQ聊天窗口信息
- C# 局域网聊天 发送信息
- 自动回复聊天机器人
- 有没有办法获取QQ聊天窗口信息
- C#获取QQ聊天输入框中的内容
- 精彩QQ自动回复
- qq自动回复
- C#制作QQ截图的自动框选功能的个人思路(二)<设置Hook>
- QQ自动聊天
- 猫猫学IOS(十八)UI之QQ聊天布局_键盘通知实现自动弹出隐藏_自动回复
- AJ学IOS(18)UI之QQ聊天布局_键盘通知实现自动弹出隐藏_自动回复
- qq聊天/msn聊天/发送邮件
- flex聊天 发送QQ表情
- C# 发送邮件 qq与163
- C# 登录QQ网站并获取QQ相关信息
- xmpp整理笔记:聊天信息的发送与显示
- QQ邮箱发送信息
- 基于Android的计步器(Pedometer)的讲解(五)——跟随界面滑动的指示器
- JQuery Mobile API提供的实用方法
- centos 挂载硬盘
- 06-5. 关键活动(30) 关键路径 和输出关键路径
- checkinstall 制作rpm或者deb包
- c# 获取QQ聊天框信息,自动发送与回复!非Hook
- SpringMVC @ResponseBody 解决中文乱码
- #iOS开发笔记#未找到应用程序的“aps-environment”的授权字符串/“no valid aps-environment entitlement found for application
- HOW TO LINK THE TRANSACTION_SOURCE_ID TO TRANSACTION_SOURCE_TYPE_ID
- 组合模式
- js面向原型话语言总结
- MFC快捷键
- GO语言反射机制
- MyBatis指定JdbcType