如何在WinTitle参数中使用AutoHotkey实例变量?

如何在WinTitle参数中使用AutoHotkey实例变量?,autohotkey,Autohotkey,假设我有一个函数,可以使用进程的HWNDid获取进程的窗口标题: GetWindowTitle(hwnd){ Wingtittle,标题,ahk_id%hwnd% 返回标题 } 到目前为止,一切顺利。它就像一个符咒。因此,假设我试图以这种方式将一些功能包装到类中: 类运行过程{ hwnd:=“” windowTitle:“” __新(hwnd){ this.hwnd:=hwnd this.windowTitle:=GetWindowTitle() } GetWindowTitle(){ Win

假设我有一个函数,可以使用进程的
HWND
id获取进程的窗口标题:

GetWindowTitle(hwnd){
Wingtittle,标题,ahk_id%hwnd%
返回标题
}
到目前为止,一切顺利。它就像一个符咒。因此,假设我试图以这种方式将一些功能包装到类中:

类运行过程{
hwnd:=“”
windowTitle:“”
__新(hwnd){
this.hwnd:=hwnd
this.windowTitle:=GetWindowTitle()
}
GetWindowTitle(){
Wingtittle,title,ahk_id%此.hwnd%
返回标题
}
}
上述代码无法加载,并显示以下消息:

以下变量名包含非法字符:“this.hwnd”

为了使用实例变量
hwnd
作为
wingtitle
中的
WinTitle
参数,我尝试了几种替代方法,但都没有成功。唯一对我有效的方法是使用一个局部变量来获取
this.hwnd
的内容,然后将该局部变量用作
WinTitle
参数,如下所示:

WinGetTitle, title, % "ahk_id " this.hwnd
GetWindowTitle(){
foo:=this.hwnd
Wingtittle,标题,ahk_id%foo%
返回标题
}
然而,正如你可能猜到的,至少在我看来,这并不理想

有没有一种方法可以立即将
this.hwnd
用作
WinTitle
参数


谢谢

我认为这是传统表达式语法与现代表达式语法之间存在问题的典型案例。
不过,从这个角度来看,令人耳目一新的是,通常有问题的人都在写2007级AHK,但很高兴看到你在写现代AHK

因此,无论如何,忘记使用
%%
引用变量。这就是传统的AHK方式。在现代表达式语句中,您只需键入要引用的变量的名称,例如,您对运算符的赋值就可以了,因为它使用的是现代表达式语法(赋值将是传统的方式)

但是,几乎所有没有被更现代的函数所取代的命令,仍然在每个参数上使用传统语法(除非文档中另有规定)。
因此,您必须设置参数来计算表达式,而不是期望使用传统的文本参数。为此,您可以从一个
%
参数开始,然后是一个空格。
因此,您的
wingtitle
命令应该如下所示:

WinGetTitle, title, % "ahk_id " this.hwnd
ahk_id
周围加上引号,因为这是在表达式中指定字符串的方式,然后只需键入要连接到该字符串的变量。
可以在这里像so
%一样使用“ahk_id”。这个.hwnd
,但它完全是多余的,在我看来也很奇怪

另外,在初始值设定项
\uu New
中调用
GetWindowTitle()
函数时,前面需要一个
this.

将实例变量初始化为零也是多余的。如果你想的话,你可以移除它

成品:

MyCoolObject := new RunningProcess(WinExist("A"))
MsgBox, % "The handle of currently active window is: " MyCoolObject.hwnd "`nAnd its title is: " MyCoolObject.windowTitle

class RunningProcess
{
    __New(hwnd) 
    {
        this.hwnd := hwnd
        this.windowTitle := this.GetWindowTitle()
    }

    GetWindowTitle() 
    {
        WinGetTitle, title, % "ahk_id " this.hwnd
        return title
    }
}

要了解有关传统语法与表达式语法的更多信息,请参见文档中的本页示例:

这样的答案是我完全爱上StackOverflow的原因。我会尽快试一试。谢谢