以管理员身份运行ahk脚本时报错“can't load icon”

我有一个脚本通过 【menu, tray, icon】命令设置了任务栏托盘图标,平常使用没问题,但因为有些窗口无法拦截热键,所以要用管理员身份来运行这脚本;

使用右键菜单“以管理员身份运行”该脚本时,会跳出错误提示,报错“can’t load icon”,并指向上述设置图标的命令;无论怎么改图标名都无效;但普通运行脚本时没这问题,图标也加载正常;

使用管理员身份启动命令行,再在里面运行该脚本,则能正常运行,图标加载正常,也正常实现了对某些窗口的热键拦截。

所以,想问一下,这个“can’t load icon”错误怎么解决,或者怎么让脚本调用时自行以管理员身份运行?

不太熟悉ahk,但你的问题似乎是由于普通用户运行和管理员运行的起始位置不同导致的相对路径错误,在脚本里把图标的位置改为绝对路径可能有帮助。

管理员权限的话,我记得 AutoHotkey 帮助里面有示例来着(下方示例是 AutoHotkey v2),icon 这个倒没遇到过:

; 以管理员权限启动自身
full_command_line := DllCall("GetCommandLine", "str")
if not (A_IsAdmin or RegExMatch(full_command_line, " /restart(?!\S)"))
{
    try
    {
        if A_IsCompiled
            Run '*RunAs "' A_ScriptFullPath '" /restart'
        else
            Run '*RunAs "' A_AhkPath '" /restart "' A_ScriptFullPath '"'
    }
    ExitApp
}
1 个赞

我后来自己在命令行调用时直接用脚本全路径作为命令运行也出现同样的错误,我就知道是因为要设置脚本当前路径了,加了一行

SetWorkingDir %A_ScriptDir%

就解决了。