找回密码
 加入
搜索
查看: 2193|回复: 4

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

[复制链接]
发表于 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("[CLASS:Notepad]", "", 10)
ConsoleWrite("$hwnd2=" & $hwnd2 & @CRLF)
WinActivate($hwnd2)

Sleep(1500)

Local $hwnd3= WinActive("[CLASS:Notepad]")
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)
小白,今天木事,练习一下几个窗口函数,发现不尽人意,发上来请大侠们提点提点,看看是哪里没有理解透彻,先行感谢了......
发表于 2016-4-9 22:50:17 | 显示全部楼层
回复 1# cashiba


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

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

函数不要乱用
 楼主| 发表于 2016-4-10 00:39:09 | 显示全部楼层
回复  cashiba
获取句柄请用  WinGetHandle   获取指定窗口的内部句柄.
WinActivate   激活指 ...
guland 发表于 2016-4-9 22:50

看帮助文件中:
激活指定窗口.
WinActivate("标题"[, "文本"])
返 回 值
成功: 返回目标窗口句柄.
失败: 返回 0, 窗口没有找到或不能被激活.
所以才有此一写法,试试看结果如何的,不知为何返回值取不到....
发表于 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]");这句为啥取不到句柄?

同上~
 楼主| 发表于 2016-4-11 13:10:32 | 显示全部楼层
程序刚运行,窗口还没来得及出现,你激活窗口失败,当然取不到了,看看WinActivate的帮助文件
失败: 返 ...
zldfsz 发表于 2016-4-10 08:50
谢谢zldfsz大师指点!
1、WinActivate函数取不到句柄,确实与程序窗口未及出现有关系,加了延时后就取到值了
2、_ArrayDisplay函数列表窗口如你所说,类似于msgbox函数等待响应后才进入下一步,所以后面的步骤都无法进行。那么,如果想让该_ArrayDisplay函数列表窗口自动关闭,不需要手工干预的话,怎么实现呢?记得msgbox函数有一个延时自动关闭的参数。是不是要通过另开一线程的法子?
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-12-26 10:05 , Processed in 0.073299 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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