窗口信息获取不到控件ID的奇怪问题。。。。【问题解决】 谢谢大家。。。
本帖最后由 倚栏听风 于 2010-5-14 07:26 编辑实在是奇怪的问题,百度了半天,可还是没有一点头绪,请教各位大大,还是直接上图吧。
我是要修改这个控件的值。但是却无法获取控件ID。
第一张图显示的是我用 窗口信息工具捕获的信息。
乍一看很正常,有控件ID 有高级类名称。 可,这只是个影子。 是骗人的,是不真实的,是在欺骗偶这个菜菜的感情的。
当使用 控件ID 201 或者是 CLASS:Static;instance:1 的时候,ControlSetText 是可以正常使用的。 但就像我刚才说的,这都是假的。
当点击这里的时候,这里会变成可编辑的,也就是如下图这样。
然后在这里输入字符,就可以改名字了。
可是然后呢,我用第一张图里获取的数据,使用 controlsettext 修改的时候。。。。。 奇迹,出现了。:face (36):
简单的说,当我手动点击并输入数据的时候,上图和上上图是一样的。
当我用 controlsettext 和我亲爱的 控件ID201 的时候,可编辑框里的内容和上图显示的内容,是不同的。
好吧,我承认,这个算不得什么奇迹。。。可是,接下来。。。。 将是见证奇迹的时刻。。。。。
这是在可编辑框下,我用窗口信息工具获取到的数据。。。
请注意,控件ID是空的。。。。 然后有朋友就会说了,不是还有高级类名称吗?
如果你也想这么说,那么。。。。。请看下图。。。。
对,没错,998。。。。您只需要九百九十八元,即可得到。。。。 可是得到什么呢????
额,其实我是想说,你没看错,这是另外一个控件,可是,控件ID同样是空的,高级类名称呢? 竟然相同?
于是,我尝试了一下 controlsettext ($title , " " , "奥特曼" ),对,没错,是尝试。。。 因为像我这样的菜鸟,一般都是直接用控件ID的。 好吧,不废话了,可结果呢? 这两个可编辑框的内容都没有发生改变。。。。 发生改变的。是下面“输入数字ID进入频道”的编辑框。
于是呢?我就继续用窗口信息工具获取了一下下面这个编辑框的信息。。。。
结果,我惊了。。。。。
华丽丽的,控件ID出来了, 105 我很喜欢的数字,因为 10/5=看帖不回贴的。。。
额,上面说到我惊了,那,我惊讶的就是,
竟然出现三个
到了这里,我彻底的不解了。。。
忽然。。。。
我看到了它------------------------------------------ 类:LabelEditWnd
说到这里,我有两个不解的问题, 为什么这里的基本窗口信息里面没有了 标题呢? 难道是因为标题不正确,所以我刚才的 controlsettext 失败?
还有,这个 LabelEditWnd 究竟是何方大神????
经过一番百度。。。。。
http://msdn.microsoft.com/cn-zh/library/84zbe4z7
貌似,是 treeview 的一个属性。。。看其内容,貌似刚才那两个控件,都是。。。 treeview 下的。。。。额,那个什么?
额,到了这里,我是彻底的不解了,彻底的没辙了,彻底的困了,彻底的。。。。。那个什么了。
所以就发帖子请教大家啦。。。。 希望大家能指点小弟一二。。。 我是实在没线索了。。。 唉,菜呀菜。。。
即便是不知道怎么办,也请各位大大顺便顶一下小弟的帖子,小弟在此先谢了。。。。
--------------------------------------进度1-----------------------------------------
上回书说到.........
呵呵,在窗口信息工具里,显示的是没有窗口标题的,且,窗口句柄也发生了改变,于是,我就在想,难道这个编辑框是在另一个窗体中?
于是我下载了一个窗口信息工具(window explere)来查看,结果发现,它果真是在另一个窗体中。 隐藏的
_WinAPI_FindWindow("labeleditwnd","")获取到类名称为 labeleditwnd ,标题为空的 窗口句柄。
WinGetClassList(_WinAPI_FindWindow("labeleditwnd","")) 获取到该窗体内的所有控件列表。。。 得到一个 edit 控件。
哇哈哈,找到了,这个就是那个编辑框的控件了。
可是,ControlSend 和 ControlSetText 都不支持以句柄来操作,所以,我们可以用 winsettitle 来改变标题。
窗口标题 要修改的窗口的标题.参考标题特殊定义. winsettitle 是支持句柄的。
$From_hwnd = _WinAPI_FindWindow("labeleditwnd","")
winsettitle($From_Hwnd , "" , "Title")
可问题出现了。
ControlSend("Title","","","Hello World!")返回值为1 ,也就是运行成功,可事实上,却没有正确的修改其内容。
ControlSettext("Title","","","Hello World!") 返回值同样为1,也是一样,没有正确的修改其内容。。。。
可是,真的没有修改成功吗?
打开 window explere 却发现,该编辑框的内容,每次都成功被编辑了。 无论是 send 还是 settext 都成功了。 可是,程序里却不是这样的。
到了这里,我再一次晕了。。。
难道是我的方向错了????????? 再次请教各位大大。。。。。 没人顶,愁了,自己顶一个。。。。
希望睡醒了能有回复吧。 对这个没有研究!等待高人来吧! 可以用句柄 可以用句柄
guland 发表于 2010-5-12 10:40 http://www.autoitx.com/images/common/back.gif
嗯,用句柄? 是用 sendmessage 或者是 posemessage 吗?
能给个详细的用法吗?
还有,句柄不是随机的吗?关闭窗口就失效了。有什么办法可以获取指定控件的句柄吗? 特征是个问题。 回复 5# 倚栏听风
那没有办法了,有很多控件AU3都获取不到控件信息的 恩,也越到相类似的问题... 回复倚栏听风
那没有办法了,有很多控件AU3都获取不到控件信息的
guland 发表于 2010-5-12 11:37 http://www.autoitx.com/images/common/back.gif
获取不到控件信息,并不代表着无法用程序来设置控件吧。 求救各位大大呀。 没办法就模拟鼠标操作吧 鼠标模拟严重影响正常操作呀。 回复 8# 倚栏听风
不要不服气,也许你厉害,你可以搞定,世上没有什么绝对的事情 ........................版主大大,我不是那个意思,我只是觉得,应该有办法的吧。 “ControlSend 和 ControlSetText 都不支持以句柄来操作” 刚好相反,用句柄操作更好~!
另外,如果无效的话还可以先 ControlClick() 操作一下(同样是支持句柄的)。 本帖最后由 倚栏听风 于 2010-5-13 17:44 编辑
回复 14# afan
支持???? 我惆怅,帮助文档里面没写呀。 我还以为不支持呢,我去试一下。
学习了,果真可以,可,即便可以,也依然是无效,最多是节省了两行代码。无需更改标题了。 直接就可以操作。
获取控件,在这里可以使用 findwindowex 。
FindWindowEx
页:
[1]
2