+ -
当前位置:首页 → 问答吧 → 为什么这个"文本框"没有窗口句柄?-- UI模拟

为什么这个"文本框"没有窗口句柄?-- UI模拟

时间:2011-12-04

来源:互联网


最近安装了朗文词典,这个词典的界面参看附图。如果想查询一个单词的解释,在一个“文本框”输入单词,然后点击OK按钮或是回车即可查到相应的注释。

我的目的是:想用程序控制自动输入这个”文本框“的内容,以方便查询。

用SPY++(VS2010中的SPY++)在主界面(UI)窗口搜索,发现这个主UI中的大部分部件在SPY中显示为灰色(应该是隐藏的)。但也一些部件是正常的,并且看到对应的Handle ID. 但输入生词的”文本框“和 所有“按钮”都没有被SPY++视为独立窗口(仅显示为主窗口handle ID),更不用说自己独立的Handle ID. 
这和我以前遇到的部件不一样,我的理解是:文本框和按钮都”窗口“,且有Handle ID. 

为了一些特殊效果,按钮可以绘制,但一个普通输入功能的文本框应该没有必用这样做吧。

问题1:是不是用特殊的文本框,SPY发现不了? 比如用WPF的窗口,是不是和传统窗口不同?或者什么基于其它平台的窗口系统?
问题2:在”文本框“中输入单词,点击OK按钮。这些动作产生的Windows Message,在SPY中可以捕获, 尝试向主窗口模拟输入这些消息(VC++6.0写得代码),但连模拟”点击OK按钮“的功能还未实现。我想这个思路是对的。要实现目的还有其它方法吗?

作者: ruma23   发布时间: 2011-12-04

确实存在没有句柄的控件:
  轻量控件有时也被称为“无窗口的控件”,它与常规的控件有一点显著的区别:它们不具有窗口句柄(hWnd 属性)。

作者: fight_in_dl   发布时间: 2011-12-04

DirectUI是没有窗口句柄的,根据你的描述,这个窗口应当不是DirectUI.

1)不排除这个控件是画上去了,如果是传统的编辑框,你用SPY++应当可以看到窗口句柄.
2)没有窗口句柄,你怎么模拟相应窗口的消息,不过可以考虑广播消息.在主窗口中处理.
 (不过编辑框中的输入实现起来应该比较麻烦)

作者: yuucyf   发布时间: 2011-12-04

应该是 windowless richedit

作者: redui   发布时间: 2011-12-04

引用 3 楼 redui 的回复:
应该是 windowless richedit

在Bing中查到一些关于windowless richedit的资料,还未细看。
http://social.msdn.microsoft.com/Search/en-US?query=Windowless%20RichEdit&ac=3
请问:
看上去windowless richedit与COM,ACtiveX技术有关。把UI做成Windowless有什么用途呢?看上去我遇到的应该是Windowless UI component(RichEdit 和 button).如果想实现我的目标,有什么新方法呢?

作者: ruma23   发布时间: 2011-12-04

引用 2 楼 yuucyf 的回复:
DirectUI是没有窗口句柄的,根据你的描述,这个窗口应当不是DirectUI.

1)不排除这个控件是画上去了,如果是传统的编辑框,你用SPY++应当可以看到窗口句柄.
2)没有窗口句柄,你怎么模拟相应窗口的消息,不过可以考虑广播消息.在主窗口中处理.
(不过编辑框中的输入实现起来应该比较麻烦)


的确是这样,SPY能捕获背景主窗口的消息(当我在操作”文本框“和OK按钮的时候),就是向背景主窗口发送相同的消息,希望有”反应“。。。。。

作者: ruma23   发布时间: 2011-12-04

热门下载

更多