通过在此目录中创建快捷方式,我已经在启动时成功使用了多个脚本:
C:\Users\USERNAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
但是当我注销后重新登录时,其中一个脚本不会加载。该脚本是一个 AHK 脚本,用作切换显示和声源的开关:
#a::
toggle += 1
if (toggle = 0)
{
Run nircmd setdefaultsounddevice "BEDROOM"
soundToggleBox("BEDROOM")
}
else if (toggle = 1)
{
Run nircmd setdefaultsounddevice "LIVING_ROOM"
soundToggleBox("LIVING_ROOM")
toggle := -1
Return
; Display sound toggle GUI
soundToggleBox(Device)
{
IfWinExist, soundToggleWin
{
Gui, destroy
}
Gui, +ToolWindow -Caption +0x400000 +alwaysontop
Gui, Add, text, x35 y8, Default sound: %Device%
SysGet, screenx, 0
SysGet, screeny, 1
xpos:=screenx-275
ypos:=screeny-100
Gui, Show, NoActivate x%xpos% y%ypos% h30 w200, soundToggleWin
SetTimer,soundToggleClose, 2000
}
soundToggleClose:
SetTimer,soundToggleClose, off
Gui, destroy
Return
当我执行时,脚本运行正常。
因此我查找了为什么无法加载,并注意到另一个用户正在使用与上面显示的不同的启动目录:
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
我注意到将此 AHK 文件的快捷方式放在此目录中可确保它在重新登录 Windows 后加载,所以我的问题是:
这两个启动项目录有什么区别:
C:\Users\USERNAME\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\StartUp
答案1
AppData 包含特定于每个用户配置文件的应用程序数据,而 ProgramData 包含整个本地计算机的应用程序数据。所以我能想到的唯一原因是,如果你以不同的用户身份重新登录(当程序将自身复制到 AppData Startup 时),则该条目不是针对每个计算机的,因此它不会执行。
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
添加启动程序的最佳方法是向(本地计算机)或HKEY_CURRENT_USER\SOFTWARE\Microsoft\Windows\CurrentVersion\Run
(每个用户)或HKEY_LOCAL_MACHINE\SOFTWARE\WOW6432Node\Microsoft\Windows\CurrentVersion\Run
(Windows 64 条目上的 Windows 32)注册表项添加一个条目。