AHK V2: 如何在管理员身份运行脚本时,以普通用户权限 Run 程序

AHK 如何在管理员身份运行时,以普通用户权限 Run 一个程序继续讨论:

分享一个 AHK V2 版本的 ShellRun,来源:Help Updating Lexikos ShellRun for Latest AutoHotkey 2 Release - AutoHotkey Community

ShellRun(prms*) {
    shellWindows := ComObject("Shell.Application").Windows
    desktop := shellWindows.FindWindowSW(0, 0, 8, 0, 1)         ; SWC_DESKTOP, SWFO_NEEDDISPATCH

    ; Retrieve top-level browser object.
    tlb := ComObjQuery(desktop,
        "{4C96BE40-915C-11CF-99D3-00AA004AE837}",               ; SID_STopLevelBrowser
        "{000214E2-0000-0000-C000-000000000046}")               ; IID_IShellBrowser

    ; IShellBrowser.QueryActiveShellView -> IShellViewc
    ComCall(15, tlb, "ptr*", sv := ComValue(13, 0))             ; VT_UNKNOWN

    ; Define IID_IDispatch.
    NumPut("int64", 0x20400, "int64", 0x46000000000000C0, IID_IDispatch := Buffer(16))

    ; IShellView.GetItemObject -> IDispatch (object which implements IShellFolderViewDual)
    ComCall(15, sv, "uint", 0, "ptr", IID_IDispatch, "ptr*", sfvd := ComValue(9, 0)) ; VT_DISPATCH

    ; Get Shell object.
    shell := sfvd.Application

    ; IShellDispatch2.ShellExecute
    shell.ShellExecute(prms*)
}

调用方法

; 启动 notepad
ShellRun notepad

; 启动 VS Code,若你使用 Scoop,建议调用开始菜单的快捷方式,避免 code.exe shims 的命令行窗口
ShellRun A_Programs "\Scoop Apps\Visual Studio Code.lnk"
1 个赞

为了避免麻烦,我一直都是以管理员权限来运行所有程序 :smiling_face_with_tear:

某种意义上而言,这是视系统安全如粪土… UAC 全关的风险太大了,若是默认使用 Administrator 用户限制多,解除那些限制既麻烦且有额外风险。

另外如果你不是用 Administrator 用户 + 关闭 UAC,我猜你是不用 VS Code 的。VS Code 默认不支持管理员进程和普通用户进程同时启动,这导致倘若在 explorer.exe 里以 VS Code 开启文档会因为权限不一致而触发无法打开的情况