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

供新手入门和老手参考的教程和相关资料,包括中文帮助
tmplinshi
Posts: 1087
Joined: 01 Oct 2013, 14:57

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

23 Mar 2015, 06:16

比如说

Code: [Select all] [Download] (Script.ahk)GeSHi © Codebox Plus

DetectHiddenWindows, On ; 开启检测隐藏窗口
Run, xxx.exe,, Hide, pid ; 隐藏运行 xxx.exe,返回 pid
WinWait, % "ahk_pid " pid ; 等待此 pid 的窗口出现

这样做会出现的问题是:
假如 xxx.exe 启动后,它是先创建了一个隐藏窗口,然后再创建主界面的...那么以上代码等待到的窗口实际上是 xxx.exe 的隐藏窗口,而不是我们预期的主界面窗口。

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

Code: [Select all] [Download] (Script.ahk)GeSHi © Codebox Plus

WinWait, % "ahk_pid " pid, 目标窗口里的其中一段文字 ; 加上窗口文字
WinWait, % "目标窗口的窗口标题 ahk_pid " pid ; 或者窗口标题
User avatar
RobertL
Posts: 540
Joined: 18 Jan 2014, 01:14
Location: China

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

15 Apr 2015, 02:09

Spoiler

以上略片面,见后。
Last edited by RobertL on 15 Apr 2015, 02:46, edited 2 times in total.
我为人人,人人为己?
tmplinshi
Posts: 1087
Joined: 01 Oct 2013, 14:57

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

15 Apr 2015, 02:32

不是的,示例中的 WinWait 要等待的窗口仍然是隐藏的。

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

我之所以要检测隐藏窗口,那是因为我要隐藏运行目标 exe。
User avatar
RobertL
Posts: 540
Joined: 18 Jan 2014, 01:14
Location: China

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

15 Apr 2015, 02:42

tmplinshi wrote:示例中的 WinWait 要等待的窗口仍然是隐藏的

哦..
有两个窗口:隐藏的exe窗口、其后同pid下的隐藏或非隐藏的主窗口。
要检测后者,且避免开启DetectHiddenWindows, On后的误判,多为WinWait加条件。
我为人人,人人为己?

Return to “教程资料”

Who is online

Users browsing this forum: No registered users and 1 guest