cashiba 发表于 2016-4-9 21:08:54

练习窗口函数遇到的问题[已解决]

本帖最后由 cashiba 于 2016-4-15 19:49 编辑

#include <AutoItConstants.au3>
#include <Array.au3>
#include <WinAPISys.au3>
#include <WinAPI.au3>

Opt("WinTitleMatchMode", 1)

run("notepad.exe")
Local $hwnd1=WinActivate("无标题 - 记事本");这句为啥取不到句柄?
ConsoleWrite("$hwnd1=" & $hwnd1 & @CRLF)

Local $hwnd2 = WinWait("", "", 10)
ConsoleWrite("$hwnd2=" & $hwnd2 & @CRLF)
WinActivate($hwnd2)

Sleep(1500)

Local $hwnd3= WinActive("")
ConsoleWrite("$hwnd3=" & $hwnd3 & @CRLF)

If $hwnd3 Then $aData = _WinAPI_EnumChildWindows($hwnd3)
_ArrayDisplay($aData, 'Note_ChildWindows')
Sleep(1500)

Local $hwnd4=WinActivate("Note_ChildWindows");这句为啥取不到句柄?
ConsoleWrite("Note_ChildWindows的句柄=" & $hwnd4 & @CRLF)

Local $hwnd5=WinActivate("class:AutoIt v3 GUI]");这句为啥取不到句柄?
ConsoleWrite("Note_ChildWindows的句柄=" & $hwnd5 & @CRLF)

Sleep(1500)
WinClose($hwnd4)
Sleep(1500)
WinClose($hwnd2)小白,今天木事,练习一下几个窗口函数,发现不尽人意,发上来请大侠们提点提点,看看是哪里没有理解透彻,先行感谢了......

guland 发表于 2016-4-9 22:50:17

回复 1# cashiba


    获取句柄请用WinGetHandle   获取指定窗口的内部句柄.

WinActivate   激活指定的窗口(设置焦点到该窗口,使其成为活动窗口).

函数不要乱用

cashiba 发表于 2016-4-10 00:39:09

回复cashiba
获取句柄请用WinGetHandle   获取指定窗口的内部句柄.
WinActivate   激活指 ...
guland 发表于 2016-4-9 22:50 http://www.autoitx.com/images/common/back.gif
看帮助文件中:
激活指定窗口.
WinActivate("标题"[, "文本"])
返 回 值
成功: 返回目标窗口句柄.
失败: 返回 0, 窗口没有找到或不能被激活.
所以才有此一写法,试试看结果如何的,不知为何返回值取不到....

zldfsz 发表于 2016-4-10 08:50:38

run("notepad.exe")
Local $hwnd1=WinActivate("无标题 - 记事本");这句为啥取不到句柄?

程序刚运行,窗口还没来得及出现,你激活窗口失败,当然取不到了,看看WinActivate的帮助文件
失败: 返回 0, 窗口没有找到或不能被激活.
可以在run("notepad.exe")的后面加个sleep(100)试试


_ArrayDisplay($aData, 'Note_ChildWindows')
Sleep(1500)
Local $hwnd4=WinActivate("Note_ChildWindows");这句为啥取不到句柄?

_ArrayDisplay函数会导致脚本进入一个循环,直到列表视图窗口关闭才会继续执行后面的代码,
所以执行Local $hwnd4=WinActivate("Note_ChildWindows")的时候窗口已经不存在了

Local $hwnd5=WinActivate("class:AutoIt v3 GUI]");这句为啥取不到句柄?
同上~

cashiba 发表于 2016-4-11 13:10:32

程序刚运行,窗口还没来得及出现,你激活窗口失败,当然取不到了,看看WinActivate的帮助文件
失败: 返 ...
zldfsz 发表于 2016-4-10 08:50 http://www.autoitx.com/images/common/back.gif谢谢zldfsz大师指点!
1、WinActivate函数取不到句柄,确实与程序窗口未及出现有关系,加了延时后就取到值了
2、_ArrayDisplay函数列表窗口如你所说,类似于msgbox函数等待响应后才进入下一步,所以后面的步骤都无法进行。那么,如果想让该_ArrayDisplay函数列表窗口自动关闭,不需要手工干预的话,怎么实现呢?记得msgbox函数有一个延时自动关闭的参数。是不是要通过另开一线程的法子?
页: [1]
查看完整版本: 练习窗口函数遇到的问题[已解决]