Page 1 of 1

开启“DetectHiddenWindows, On”后,等待窗口用 pid 或者 exe 不可靠

Posted: 23 Mar 2015, 06:16
by tmplinshi
比如说

Code: Select all

DetectHiddenWindows, On ; 开启检测隐藏窗口
Run, xxx.exe,, Hide, pid ; 隐藏运行 xxx.exe,返回 pid
WinWait, % "ahk_pid " pid ; 等待此 pid 的窗口出现
这样做会出现的问题是:
假如 xxx.exe 启动后,它是先创建了一个隐藏窗口,然后再创建主界面的...那么以上代码等待到的窗口实际上是 xxx.exe 的隐藏窗口,而不是我们预期的主界面窗口。

严谨的做法是,加上窗口标题或者窗口文字作为检测条件。比如:

Code: Select all

WinWait, % "ahk_pid " pid, 目标窗口里的其中一段文字 ; 加上窗口文字
WinWait, % "目标窗口的窗口标题 ahk_pid " pid ; 或者窗口标题

Re: 开启“DetectHiddenWindows, On”后,等待窗口用 pid 或者 exe 不可靠

Posted: 15 Apr 2015, 02:09
by RobertL
Spoiler
以上略片面,见后。

Re: 开启“DetectHiddenWindows, On”后,等待窗口用 pid 或者 exe 不可靠

Posted: 15 Apr 2015, 02:32
by tmplinshi
不是的,示例中的 WinWait 要等待的窗口仍然是隐藏的。

这么说吧,假设目标 exe 启动时先创建了一个隐藏窗口,之后再创建可见的主窗口。如果代码里启用了检测隐藏窗口,那么 AHK 捕捉到的就会是目标 exe 创建的隐藏窗口。

我之所以要检测隐藏窗口,那是因为我要隐藏运行目标 exe。

Re: 开启“DetectHiddenWindows, On”后,等待窗口用 pid 或者 exe 不可靠

Posted: 15 Apr 2015, 02:42
by RobertL
tmplinshi wrote:示例中的 WinWait 要等待的窗口仍然是隐藏的
哦..
有两个窗口:隐藏的exe窗口、其后同pid下的隐藏或非隐藏的主窗口。
要检测后者,且避免开启DetectHiddenWindows, On后的误判,多为WinWait加条件。