AutoHotkey脚本,用于在特定应用上自动窗口全屏

时间:2015-04-09 19:16:28

标签: autohotkey

这是我在的地方:

#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运行时,它的窗口边框被移除并且最大化。

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

LWin & f::

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

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

现在我希望它可以通过App运行来触发。

我试过了:

If ProcessExist("ForgedAlliance.exe") {

}
return

但是没有用,这个条件总是返回true(总是执行代码),即使FA没有在我的鼠标悬停的目标上运行。

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

2 个答案:

答案 0 :(得分:1)

您的流程存在检查需要进入计时器。

#Persistent
SetTimer, CheckForProcess, 100

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

答案 1 :(得分:1)

根据您的描述,听起来您将循环放在流程检查中。这意味着它只会检查一次。这是一个使用计时器的更好的解决方案。

#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
}