【问题标题】:AutoHotkey script for automatic windowed-fullscreen on a specific appAutoHotkey 脚本,用于特定应用程序上的自动窗口全屏
【发布时间】:2015-06-15 07:46:18
【问题描述】:

这就是我所在的位置:

#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

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

我试过了:

If ProcessExist("ForgedAlliance.exe") {

}
return

但这不起作用,即使 FA 没有针对鼠标悬停的任何目标运行,此条件始终返回 true(始终执行代码)。

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

【问题讨论】:

  • ProcessExist 函数的代码在哪里?
  • 在脚本中放置无限循环并不是计时器的理想替代品。请看我的回答。
  • @ElliotDeNolf 与上述函数循环中的代码相同。这和 fischgeek 的建议在应用程序开始运行和之后的任何应用程序、窗口或菜单上都是有效的。这当然不是我想要的。我只想定位与 exe 名称或窗口名称匹配的应用程序,没有其他。

标签: autohotkey


【解决方案1】:

您的进程存在检查需要在计时器内进行。

#Persistent
SetTimer, CheckForProcess, 100

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

【讨论】:

  • 当进程启动任何修复建议时,这会将效果应用于光标下方的任何框架(浏览器、资源管理器、应用程序、菜单)?
  • 此代码(或您的代码)中没有任何内容受鼠标光标悬停事件的影响。我的代码仅向您展示如何检查进程是否正在运行并在需要时触发操作。我可能不完全理解你的要求。你能详细说明吗?我也愿意将其转移到聊天中。
【解决方案2】:

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

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

【讨论】:

  • 你能给我解释一下这段代码吗?你为什么说 CheckProc 然后 proc 不存在。我不明白。为什么它不存在有任何行动?第二部分是什么,您将 exeName 称为变量,我在任何地方都看不到该变量
  • 无论如何,您提供的脚本会立即自行关闭。
  • 仅包含计时器的脚本必须具有#Persistent 指令。这就是它立即关闭的原因。
  • @fischgeek 是正确的。我有一个#Include 用于ProcessExist 函数,它使我的函数无法关闭。我已将#Persistent 添加到我的答案中。
  • 做到了。谢谢你。我在最大化之前加入了最小化,这样窗口就不会偏离中心。它只会隐藏窗口一瞬间。代码现在很完美,正是我想要的,谢谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多