如果 WinExist 使用变量和 RegEx

If WinExist using variable and RegEx

免责声明:是的,我读过另一篇与我类似的 Whosebug 帖子,但是 none 在标题上使用了 RegEx,我找不到解决方案。

我需要打开某个window是这样的:

PlayerName - Game Version 1.2.15

其中 PlayerName 可以是任何东西(例如 aywradwe、john 或 flyingcar82)

我可以从某个函数 getName() 中获取播放器名称,该函数与我的问题及其正常工作无关。

playerName = getName()

然后我尝试使用 playerName 变量和正则表达式打开正确的 window 以匹配任何可能的游戏版本。

 SetTitleMatchMode RegEx
 playerName = getName()
 IfWinExist, playerName - Game Version.*
 {
 WinActivate  
 Sleep, 500
 WinMaximize
 }

但它会尝试使用 "playerName" 而非其值来匹配标题。我也试过 %playerName% 但它也不起作用...

我错过了什么?

这里有两个问题,它们来自使用错误的旧语法。

问题 1:
playerName = getName()
您正在使用已弃用的传统方式将文字文本分配给变量 (=)。
现在变量 playerName 保存文字文本 "getName()".
:= 应用于将表达式的结果分配给变量:
playerName := getName()

问题 2:
使用已弃用的遗留 IfWinActive 命令。
它本身不完全是一个问题,但结合了对遗留语法的错误使用。在遗留声明中,您确实会通过执行 %playerName% 来引用变量,如果您修复了 问题 1.
,那将起作用 但是让我们以正确的方式来做,并使用更新的 WinExist() 函数:

if (WinExist(playerName " - Game Version.*")) ;concatenate the contents of a variable and string
{
    WinActivate  
    Sleep, 500
    WinMaximize
}

总的来说,我建议尝试摆脱旧语法。
这是文档中的一个很好的页面,可以帮助您了解不同之处:
https://www.autohotkey.com/docs/Language.htm