You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

开机启动VBS脚本:以管理员权限启动程序并设置进程优先级

解决VBS启动管理员程序并设置进程优先级的问题

嘿,你已经搞定了管理员启动程序的核心部分,只差最后一步调整进程优先级啦!问题在于ShellExecute启动程序后没法直接拿到进程句柄,所以我们需要借助WMI(Windows管理规范)来找到刚启动的进程,再修改它的优先级。

下面是完整的可运行代码,我帮你整合了启动+优先级设置的逻辑:

Set app = CreateObject("Shell.Application")
' 以管理员权限最大化启动目标程序(保留你原来的参数)
app.ShellExecute """d:\SYNC\Dropbox\PORTABLE_PROGRAMS\ahk\Navigare\KeyboardEnchancer\KeyboardEnchancer.exe""", , , "runas", 3

' 给程序一点启动时间,避免还没加载就查找不到进程
' 可以根据程序启动速度调整这个数值(单位:毫秒)
WScript.Sleep 2000

' 调用WMI获取系统进程列表
Set wmiService = GetObject("winmgmts:{impersonationLevel=impersonate}!\\.\root\cimv2")

' 精确查找目标进程:同时匹配进程名和完整路径,避免同名进程干扰
Set targetProcesses = wmiService.ExecQuery( _
    "SELECT * FROM Win32_Process WHERE " & _
    "Name='KeyboardEnchancer.exe' AND " & _
    "ExecutablePath='d:\\SYNC\\Dropbox\\PORTABLE_PROGRAMS\\ahk\\Navigare\\KeyboardEnchancer\\KeyboardEnchancer.exe'" _
)

' 遍历找到的进程,设置优先级
For Each proc In targetProcesses
    ' 这里可以根据需求替换优先级数值:
    ' - 低于正常: 16384
    ' - 正常: 32
    ' - 高于正常: 32768 (你要的选项)
    ' - 高优先级: 128
    ' - 实时: 256
    proc.SetPriority(32768)
    WScript.Echo "成功设置进程优先级为「高于正常」"
Next

几个关键细节说明:

  • 等待时间WScript.Sleep 2000是给程序留2秒启动时间,如果你的程序启动慢,可以改成3000(3秒)甚至更长,确保进程已经加载完成。
  • 精确查找进程:用ExecutablePath匹配完整路径,能避免系统中其他同名进程被误改优先级,比只搜进程名更可靠。
  • 优先级数值:Windows系统定义了固定的优先级常量,上面的代码注释里已经列了常用选项,直接替换数值就能切换优先级。
  • 权限问题:因为你已经用runas以管理员身份启动程序,所以调整进程优先级的权限是足够的,不用额外提权。

如果运行时还是找不到进程,可以先测试下等待时间是否足够,或者检查ExecutablePath里的路径转义是否正确(VBS里路径的反斜杠要写两次\\)。

内容的提问来源于stack exchange,提问作者Ciprian Dragoe

火山引擎 最新活动