honylan 发表于 2009-10-9 23:10:44

关于ControlGetHanDle和GUICtrlGetHanDle的疑惑

本帖最后由 honylan 于 2009-10-9 23:16 编辑

在遇到需要判断其它程序的一个按钮控件是否为隐藏时遇到这个问题
(使用ControlCommand函数也可以获取状态,但是现在遇到了这个问题就顺便提出来,望高手能予解惑)
$Chd=ControlGetHandle("窗口","","")
可以获得该按钮控件的句柄.
$Cid = DllCall("User32.dll", "hwnd", "GetDlgCtrlID", "hwnd", $Chd)
这里通过句柄也可以获得该控件的ID
(这个控件ID和窗口信息工具看到的ID是一样的,证明确实获得了该控件的ID)
$state=GUICtrlGetState($Cid)
但是在得到控件ID后,调用GUICtrlGetState获取控件状态时,会失败!

后来实在无解时,尝试反向查询,想看看用GUICtrlGetHanDle获取句柄的结果.
结果发现用GUICtrlGetHanDle($Cid)居然获取到的句柄是0x000000,
在这里本人非常不解,ControlGetHandle可以通过窗口和类名来得到句柄,应用面更广泛一点,
但是GUICtrlGetHanDle命令本身就是通过控件ID来得到句柄,为什么却得不到?
经实验,通过GUICreate创建的窗口返回的ID确实可以应用于GUICtrlGetHanDle
现在我怀疑是否GUICtrl等一系列操作函数是否仅支持AU3本身创建的窗口控件?

按理说返回一个控件的状态应该是很容易的,可是得到了控件ID为什么却返不回状态叫?
望高手予以解惑!

pusofalse 发表于 2009-10-10 00:16:19

Q: 现在我怀疑是否GUICtrl等一系列操作函数是否仅支持AU3本身创建的窗口控件?
A: Bingo!

sxd 发表于 2009-10-10 11:03:59

本人斗胆评价楼上的回答是 今日最精简回复
ps:没有'之一'
页: [1]
查看完整版本: 关于ControlGetHanDle和GUICtrlGetHanDle的疑惑