我编写了一个脚本来测试选择弹出窗口。
SetTitleMatchMode, 2
winTitle:="RGui (64-bit) ahk_class Rgui Workspace ahk_exe Rgui.exe"
popWin:="ahk_class #32770 ahk_exe Rgui.exe"
IfWinExist,%winTitle%
{
WinActivate
send !{F4}
}
IfWinExist,%popWin%
{
WinActivate
WinWaitActive, %popWin%
WinGetClass, outputvar, %popWin%
MsgBox %outputvar%
}
此脚本用于发送ALT-F4以关闭打开的R窗口,当确认弹出窗口出现时,显示弹出窗口的类名。
第一个if
块工作正常。但是,发送if
块有时会起作用,有时则不起作用。活动窗口信息显示弹出窗口'课程信息是:
窗口标题,类和过程
Question
ahk_class #32770
ahk_exe Rgui.exe
我不知道为什么IfWinExist,%popWin%
不起作用。我尝试将popWin:="ahk_class #32770 ahk_exe Rgui.exe"
更改为popWin:="ahk_class #32770"
,但有时仍有效,有时则无效。那么我该如何正确选择弹出窗口呢?
答案 0 :(得分:1)
我更改了您的AutoHotkey代码,因此它应该为您提供所需的功能。
SetTitleMatchMode, 2
winTitle:="RGui (64-bit) ahk_class Rgui Workspace ahk_exe Rgui.exe"
popWin:="ahk_class #32770 ahk_exe Rgui.exe"
if (hWnd := WinExist(winTitle)) ;this assigns hWnd, it does not compare hWnd with WinExist(winTitle)
{
;WinActivate, ahk_id %hWnd%
;send !{F4}
WinClose, ahk_id %hWnd% ;WinClose is more direct than Alt+F4 if it works (Send can potentially send key presses to the wrong window if a new window suddenly appears)
}
WinWait, %popWin%, , 5 ;wait for window to exist, give up after 5 seconds
if !ErrorLevel ;if window found within 5 seconds
{
WinGet, hWnd, ID, %popWin%
WinActivate, ahk_id %hWnd%
WinGetClass, outputvar, ahk_id %hWnd%
MsgBox %outputvar%
}
注意:
在大多数情况下,WinActivate
需要指定窗口标题/ hWnd。
你的代码的第二部分有时会工作,但有时不工作,可能是因为如果弹出窗口很快出现,那么IfWinExist会找到窗口,但如果弹出窗口缓慢出现,那么在窗口存在之前会发生IfWinExist检查,因此不会找到窗口。