AutoHotKey选择弹出窗口不起作用

时间:2017-01-05 12:08:47

标签: autohotkey

我编写了一个脚本来测试选择弹出窗口。

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

snapshot of the above info

我不知道为什么IfWinExist,%popWin%不起作用。我尝试将popWin:="ahk_class #32770 ahk_exe Rgui.exe"更改为popWin:="ahk_class #32770",但有时仍有效,有时则无效。那么我该如何正确选择弹出窗口呢?

1 个答案:

答案 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检查,因此不会找到窗口。