用C#能在QQ窗体里发送消息吗?

wangtiantian23 2017-03-14 05:15:45
查了好多文章都无法完美解决在QQ窗体里发送消息。但是看有些桌面应用是可以给在QQ窗体里发送消息的。
看到有用AumotaionElement方式实现,我也尝试写了一下,能发现窗体但是无法找到文本框和发送消息。


AutomationElement aeDeskTop = AutomationElement.RootElement;

// 不设定查找条件,列出所有窗体
this.textBox1.AppendText("\r\n");
AutomationElementCollection elementCollection = aeDeskTop.FindAll(TreeScope.Children, Condition.TrueCondition);
foreach (AutomationElement frm in elementCollection)
{
this.textBox1.AppendText(string.Format("窗体名称:{0}\r\n", frm.Current.Name));
if (frm.Current.Name == "豆干") //这里是打开的QQ窗体的名称
{
elementCollection = frm.FindAll(TreeScope.Subtree,
Condition.TrueCondition);
foreach (AutomationElement control in elementCollection)
{
this.textBox1.AppendText(string.Format("控件id:{0}\r\n", control.Current.AutomationId));
}
}
}


用以上代码能找到窗体,但是无法找到里面的文本框和按钮

//从网上找到的输入文本内容
System.Windows.Forms.SendKeys.SendWait(textBox2.Text);

//从网上找到的点击发送消息按钮
InvokePattern ipClickButton1 = (InvokePattern)aeAllEdit1[t].GetCurrentPattern(InvokePattern.Pattern);
ipClickButton1.Invoke();
//这两步都无法实现


有什么好方法能实现那???请各位大神不吝赐教。
...全文
578 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
童年陰影 2017-03-17
  • 打赏
  • 举报
回复
引用 3 楼 crystal_lz 的回复:
[quote=引用 1 楼 zj_zwl 的回复:] 控件都是绘制上去的
绘制上去只能说他不存在句柄了 没法通过句柄去访问控件 但是很多基于无句柄的UI 都能通过UI自动化 获取到UI的元素 http://www.cnblogs.com/stbchina/archive/2010/01/25/Tech-Trend-of-Microsoft-UI-Automation-Testing-Part-1.html 这是一个相关文章 上面有一段话 这是类似DCOM技术。技术模型是这样的,UI程序可以暴露出一个Interface,方便另一个程序对其进行控制。MSAA技术的初衷是为了方便残疾人使用Windows 程序。比如盲人看不到窗口,但是盲人可以通过一个USB读屏器连接到电脑上, 读屏器通过UI程序暴露出来的这个Interface,就可以获取程序信息,通过盲文或者其它形式传递给盲人。 那些UI实现了一些接口 MSAA提供了如此方便的功能, UI自动化测试自然可以借用这项技术。MSAA暴露出来的Interface叫做IAccessible。测试程序和目标UI程序互操作流程如下: 1. 测试程序调用Windows API: AccessibleObjectFromWindow,传入目标UI程序HWND。 2. AccessibleObjectFromWindow函数向UI程序发送WM_GETOBJECT消息。 3. UI程序创建实现了IAccessible的内部类,然后通过LresultFromObject API把IAccessible 接口返回给测试程序。 4. 测试程序拿到IAccessible接口,开始调用IAccessible接口函数操作测试目标。 [/quote] 二脸懵逼
wangtiantian23 2017-03-16
  • 打赏
  • 举报
回复
@卧_槽 除了按键精灵,C#是完成不了这项工作了吗?
卧_槽 2017-03-15
  • 打赏
  • 举报
回复
写个按键精灵就行啦
crystal_lz 2017-03-14
  • 打赏
  • 举报
回复
引用 1 楼 zj_zwl 的回复:
控件都是绘制上去的

绘制上去只能说他不存在句柄了 没法通过句柄去访问控件 但是很多基于无句柄的UI 都能通过UI自动化 获取到UI的元素
http://www.cnblogs.com/stbchina/archive/2010/01/25/Tech-Trend-of-Microsoft-UI-Automation-Testing-Part-1.html
这是一个相关文章 上面有一段话
这是类似DCOM技术。技术模型是这样的,UI程序可以暴露出一个Interface,方便另一个程序对其进行控制。MSAA技术的初衷是为了方便残疾人使用Windows 程序。比如盲人看不到窗口,但是盲人可以通过一个USB读屏器连接到电脑上, 读屏器通过UI程序暴露出来的这个Interface,就可以获取程序信息,通过盲文或者其它形式传递给盲人
那些UI实现了一些接口

MSAA提供了如此方便的功能, UI自动化测试自然可以借用这项技术。MSAA暴露出来的Interface叫做IAccessible。测试程序和目标UI程序互操作流程如下:

1. 测试程序调用Windows API: AccessibleObjectFromWindow,传入目标UI程序HWND。

2. AccessibleObjectFromWindow函数向UI程序发送WM_GETOBJECT消息。

3. UI程序创建实现了IAccessible的内部类,然后通过LresultFromObject API把IAccessible 接口返回给测试程序。

4. 测试程序拿到IAccessible接口,开始调用IAccessible接口函数操作测试目标。

crystal_lz 2017-03-14
  • 打赏
  • 举报
回复
简单点吧 让他获得焦点 然后 SendKeys.SendWait("this is message"); SendKeys.SendWait("%s");//Alt + s 发送按钮的快捷键
zj_zwl 2017-03-14
  • 打赏
  • 举报
回复
控件都是绘制上去的

110,533

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧