cashiba 发表于 2016-12-13 12:26:12

如果此参数为 0, 则本函数相当于 _WinAPI_EnumWindows()?[已解决]

本帖最后由 cashiba 于 2017-3-18 09:30 编辑


如上。
如下:#include <WinAPISys.au3>
#include <Array.au3>
#include <WinAPI.au3>

local $srr=_WinAPI_EnumChildWindows(0)
if @error then
        msgbox(4096,"提示","发生错误",3)
        ;exit
EndIf
_ArrayDisplay($Srr)
;以上运行后无反应无结果。
;以下运行后有正常结果。
Local $srr = _WinAPI_EnumWindows()
_ArrayDisplay($Srr)为什么效果不一样?

tubaba 发表于 2016-12-13 12:41:20

本帖最后由 tubaba 于 2016-12-13 12:44 编辑

從 include 文件来看,应该是解释有误,或者是翻译错误,此hwnd如果=_WinAPI_GetDesktopWindow(),那么
函數相當於_WinAPI_EnumWindows(),即
#include <WinAPISys.au3>
#include <Array.au3>
#include <WinAPI.au3>

local $srr=_WinAPI_EnumChildWindows(_WinAPI_GetDesktopWindow())
if @error then
      msgbox(4096,"提示","发生错误",3)
      ;exit
EndIf
_ArrayDisplay($Srr)
;以上运行后无反应无结果。
;以下运行后有正常结果。
Local $srr = _WinAPI_EnumWindows()
_ArrayDisplay($Srr)

或者

Func _WinAPI_EnumChildWindows($hWnd, $bVisible = True)
if $hWnd=0 then $hWnd=_WinAPI_GetDesktopWindow();在原函數加上這一行
        If Not _WinAPI_GetWindow($hWnd, 5) Then Return SetError(2, 0, 0) ; $GW_CHILD

        Local $hEnumProc = DllCallbackRegister('__EnumWindowsProc', 'bool', 'hwnd;lparam')

        Dim $__g_vEnum = []
        DllCall('user32.dll', 'bool', 'EnumChildWindows', 'hwnd', $hWnd, 'ptr', DllCallbackGetPtr($hEnumProc), 'lparam', $bVisible)
        If @error Or Not $__g_vEnum Then
                $__g_vEnum = @error + 10
        EndIf
        DllCallbackFree($hEnumProc)
        If $__g_vEnum Then Return SetError($__g_vEnum, 0, 0)

        __Inc($__g_vEnum, -1)
        Return $__g_vEnum
EndFunc   ;==>_WinAPI_EnumChildWindows

cashiba 发表于 2016-12-13 13:15:03

谢谢tubaba老师指点!
{:face (316):}
刚看到这些函数,在练习中......遇到的问题.
以为自己写法有误,还没怀疑到原函数或帮助文件解释错误的问题。

cashiba 发表于 2016-12-13 13:20:22

另外,这两个函数分别来自于两个自定义函数群#include <WinAPISys.au3>
_WinAPI_EnumChildWindows

#include <WinAPI.au3>
_WinAPI_EnumWindows
在函数构造机制上有差别吗?

131738 发表于 2016-12-13 17:09:54

從 include 文件来看,应该是解释有误,或者是翻译错误,此hwnd如果=_WinAPI_GetDesktopWindow(),那么
函數相 ...
tubaba 发表于 2016-12-13 12:41 http://www.autoitx.com/images/common/back.gif

检查了下, 翻译没有问题, 看来应该是官方文档描述错误.........

cashiba 发表于 2016-12-13 20:35:42

_WinAPI_EnumChildWindows
_WinAPI_EnumWindows看到这两个函数的时候,就在想,
既然_WinAPI_EnumWindows是_WinAPI_EnumChildWindows的特例,
那么完全可以只用_WinAPI_EnumChildWindows.......

不太懂API
问下大神们:
_WinAPI_EnumChildWindows能完全代替_WinAPI_EnumWindows吗?
页: [1]
查看完整版本: 如果此参数为 0, 则本函数相当于 _WinAPI_EnumWindows()?[已解决]