找回密码
 加入
搜索
查看: 2031|回复: 2

[AU3基础] [已解决] 类重叠怎么知道哪个类在顶层 给哪个类发送鼠标点击消息

[复制链接]
发表于 2010-2-19 21:56:57 | 显示全部楼层 |阅读模式
本帖最后由 lainline 于 2010-3-30 18:53 编辑

类似窗口信息工具的功能
#include<Array.AU3>
HotKeySet("{ESC}","_EXIT")
Opt("MouseCoordMode",2)
_MAIN()

Func _MAIN()
Global        $DD[1]

While 1
$ASD=WinList()

ReDim $DD[$ASD[0][0]+1]
$DD[0]=$ASD[0][0]
For $S=1 To $ASD[0][0]
$DD[$S] = $ASD[$S][1]
Next

For $TT In $DD
If Not WinActive ( $TT, "")=0 Then 
Local $classl=_WinGetCtrlInfo($TT)
_GET_WINDOWS($TT,$classl)
EndIf
Next
Sleep(50)
WEnd
EndFunc


Func _EXIT()
        Exit
EndFunc        


Func _GET_WINDOWS($hWINDOW,$class2)
Local $end[1]
For $ttt=1 To $class2[0][0]
        ;_ArrayDisplay($class2)
$SDFAmouse =MouseGetPos ();鼠标位置
$SDFA =ControlGetPos ($hWINDOW, "", $class2[$ttt][0]);位置
If Not @error Then 
If $SDFAmouse[0]>=$SDFA[0] And $SDFAmouse[0]<= $SDFA[0]+$SDFA[2] And $SDFAmouse[1]>=$SDFA[1] And $SDFAmouse[1]<= $SDFA[1]+$SDFA[3] Then 
_ArrayAdd($end,$class2[$ttt][0])
EndIf
EndIf
Next
ToolTip("hwindow:"&$hWINDOW & @LF & "Class:" & _ArrayToString($end))
EndFunc


Func _WinGetCtrlInfo($hWin)
    If IsString($hWin) Then $hWin = WinGetHandle($hWin)
    Local $sClassList = WinGetClassList($hWin), $iAdd = 1, $aDLL, $sHold
    Local $aSplitClass = StringSplit(StringTrimRight($sClassList, 1), @LF), $aReturn[1][2]
    For $iCount = $aSplitClass[0] To 1 Step - 1
        Local $nCount = 0
        While 1
            $nCount += 1
            If ControlGetHandle($hWin, '', $aSplitClass[$iCount] & $nCount) = '' Then ExitLoop
            If Not StringInStr(Chr(1) & $sHold, Chr(1) & $aSplitClass[$iCount] & $nCount & Chr(1)) Then
                $sHold &= $aSplitClass[$iCount] & $nCount & Chr(1)
                $iAdd += 1
                ReDim $aReturn[$iAdd][2]
                $aReturn[$iAdd - 1][0] = $aSplitClass[$iCount] & $nCount
                $aDLL = DllCall('User32.dll', 'int', 'GetDlgCtrlID', 'hwnd', _
                    ControlGetHandle($hWin, '', $aSplitClass[$iCount] & $nCount))
                If @error = 0 Then
                    $aReturn[$iAdd - 1][1] = $aDLL[0]
                Else
                    $aReturn[$iAdd - 1][1] = ''
                EndIf
            EndIf
        WEnd
    Next
    $aReturn[0][0] = $iAdd - 1
    Return $aReturn
EndFunc   ;==>_WinGetCtrlInfo()
 楼主| 发表于 2010-2-19 21:58:39 | 显示全部楼层
是否和控件ID的大小有关?
 楼主| 发表于 2010-2-19 22:24:16 | 显示全部楼层
在英文站上问到了 _WinAPI_WindowFromPoint 自问自答  晕
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-5-17 10:35 , Processed in 0.098383 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表