用于特定应用程序自动窗口全屏的 AutoHotkey 脚本

AutoHotkey script for automatic windowed-fullscreen on a specific app

这是我所在的位置:

#NoEnv  ; Recommended for performance and compatibility with future AutoHotkey releases.
SendMode Input  ; Recommended for new scripts due to its superior speed and reliability.
SetWorkingDir %A_ScriptDir%  ; Ensures a consistent starting directory.
SetTitleMatchMode, 3

Loop { ; apparently a loop is recommended for app-as-a-trigger.

  Send, ^!a



WinGet, p_exe, ProcessName, Forged Alliance, Style, Style, A {
if(Style & 0xC40000) {
  WinSet, Style, -0xC40000, A
  WinMaximize, A 

}
Sleep, 100
}
}
return

显然,我正在尝试做到这一点,以便在 ForgedAlliance.exe 运行时删除 window 边框并使其最大化。

我有一个由热键触发的工作脚本:

LWin & f::

WinGet Style, Style, A
if(Style & 0xC40000) {
  WinSet, Style, -0xC40000, A
  WinMaximize, A 

} else {
  WinSet, Style, +0xC40000, A
  WinRestore, A
}
return

现在我希望它由应用程序触发 运行。

我试过了:

If ProcessExist("ForgedAlliance.exe") {

}
return

但这没有用,这个条件总是返回真(总是执行代码)即使 FA 没有运行 瞄准我鼠标悬停的任何目标。

解决这个问题的正确方法是什么?

您的 Process Exist 检查需要进入计时器。

#Persistent
SetTimer, CheckForProcess, 100

CheckForProcess:
{
    Process, Exist, ForgedAlliance.exe
    if (ErrorLevel) {
        ; process is running
    }
    return
}

根据您的描述,您似乎将循环置于过程检查中。这意味着它只会检查一次。这是使用计时器的更好解决方案。

#Persistent

procName := "ForgedAlliance.exe"
SetTimer, CheckProc, 2000
Return

CheckProc:
    If (!ProcessExist(procName))
        Return

    WinGet Style, Style, % "ahk_exe " procName
    If (Style & 0xC40000) 
    {
        WinSet, Style, -0xC40000, % "ahk_exe " procName
        WinMaximize, % "ahk_exe " procName
    }
    Return

ProcessExist(exeName)
{
   Process, Exist, %exeName%
   return !!ERRORLEVEL
}