沧海笑 发表于 2012-1-11 11:00:19

[已解决]如何获取焦点所在控件的句柄

本帖最后由 沧海笑 于 2012-1-12 11:08 编辑

焦点是在不同的控件之间变换的,如何能获取到焦点所在控件的句柄呢?

半芯竹 发表于 2012-1-11 16:37:18

本帖最后由 半芯竹 于 2012-1-11 16:39 编辑

;检索具有键盘焦点的窗口句柄 :_WinAPI_GetFocus()
#include <WinAPI.au3>
#include <GUIConstantsEx.au3>
Opt('MustDeclareVars', 1)
_Main()
Func _Main()
    Local $gui, $msg, $btnFocus, $win, $text
    $gui = GUICreate("__WinAPI_GetFocus Example", 200, 200)
    $btnFocus = GUICtrlCreateButton("Get Focus", 50, 85, 100, 30)
    GUISetState(@SW_SHOW)
    While 1
      $msg = GUIGetMsg()
      Select
            Case $msg = $GUI_EVENT_CLOSE
                Exit
            Case $msg = $btnFocus
                $win = _WinAPI_GetFocus()
                $text = "Full Title: " & WinGetTitle($win) & @LF
                $text &= "Full Text: " & WinGetText($win) & @LF
                $text &= "Handle: " & WinGetHandle($win) & @LF
                $text &= "Process: " & WinGetProcess($win) & @LF
                MsgBox(0, "", $text)
      EndSelect
    WEnd
EndFunc   ;==>_Main
你可以修改代码为循环检测……

xiehuahere 发表于 2012-1-11 18:25:57

本帖最后由 xiehuahere 于 2012-1-11 18:27 编辑

楼主问的是控件而不是窗口。

用ControlGetFocus得到当前拥有焦点的控件的ClassNameNN(类别名),然后再用ControlGetHandle就可以获取控件句柄了。
其中,ControlGetHandle里的控件ID参数使用ClassNameNN(类别名)。

小A 发表于 2012-1-11 19:28:13

ControlGetHandle 具体看帮助文件。

半芯竹 发表于 2012-1-11 21:48:30

回复 3# xiehuahere


    你看懂代码没有,就是获取BUTTON控件的句柄。。

沧海笑 发表于 2012-1-12 11:02:25

回复 3# xiehuahere

谢谢,经测试可用

沧海笑 发表于 2012-1-12 11:06:41

回复 2# 半芯竹

_WinAPI_GetFocus()在你的例子里直接定位到了button上,
但是在更多的情况是直接定位到窗口上去了,具体为什么还不清楚

xiehuahere 发表于 2012-1-12 16:33:32

_WinAPI_GetFocus()本来就是用于检索具有键盘焦点的窗口句柄。
他这就是帮助里的例子。
页: [1]
查看完整版本: [已解决]如何获取焦点所在控件的句柄