我运行的是 Windows 7 64 位。关闭计算机时,桌面上有许多程序打开。启动计算机时,我希望这些程序自动打开。我知道 SaveMyCache,这要求我在每次关闭计算机时勾选复选框,我希望自动完成一些操作。
答案1
与您的要求相近的内容:在电源管理中启用休眠功能,而不是关闭 PC,而是使用休眠选项。这确实会关闭 PC 的电源,并将 PC 恢复到您关闭系统时的状态。
除此之外,没有内置功能可以满足您的要求。Windows 重启管理器是为这种情况创建的,但软件需要支持这一点,并且通常仅在安装新软件或安装更新时使用。
答案2
所以我决定创建这个 Powershell 脚本。
执行的操作:
- 删除先前的文件。
- 检查正在运行的进程。
- 按包含特定单词的路径过滤列表(程序)假设所有程序都安装在程序文件或者程序文件(x86)
- 获取找到的进程的可执行文件的绝对路径
- 将临时文件的路径写入临时目录中。
- 将临时文件移动到目标目录,即用户的启动文件夹。
优点:
- 用 powershell 编写,因此代码是本机的,应该可以在 Windows Vista 及更高版本上运行。
- 作品。
缺点:
此版本不会拾取安装在其他路径(不在程序文件下)的程序。这当然是必要的,以避免启动本机 Windows 进程(如 explorer.exe 等)。但是,如果您有一个像
D:\Apps
安装程序所在的路径,则可以修改以下行$_.Path -match “程序”
到
$.Path -match “程序” -或 $.路径 -match "D:\Apps"
并且它仍会起作用。
现在脚本代码:
###############################
# AUTOMATIC STARTUP GENERATOR #
# ASGEN v.1.0 by mnmnc @ 2014 #
###############################
# VARIABLES
# CURRENT PATH
$current = $(pwd).ToString()
# DESTINATION PATH
$destination_path = "$env:userprofile\AppData\Roaming\Microsoft\Windows\Start Menu\Programs\Startup\programs.bat"
# MOVING TO TEMP
cd $env:systemroot\Temp
# REMOVING OLD FILE
del $destination_path
# EMPTY ARRAYS
$arr_names = @()
$arr_paths = @()
# FILLING ARRAYS
Get-Process | Where-Object {$_.Path -match "Program" } | foreach { $arr_names += $_.Name; $arr_paths += $_.Path }
# CREATING FILE
for($i = 0; $i -le $arr_names.count -1; $i++)
{
$out = "`"" + $arr_paths[$i] + "`""
write-output $out | out-file "programs.bat" -append -Encoding ascii
}
# INFO
Write-host "`nFolowwing programs will be started on next boot:`n"
cat programs.bat
Write-host "`n"
# MOVING TO STARTUP FOLDER
mv programs.bat "$destination_path"
# RETURNING
cd $current
exit
只需复制此代码并将其粘贴到shutdown.ps1
桌面上的文件中即可。保存并关闭此文件。现在创建第二个文件shutdown.bat
并输入代码
powershell shutdown.ps1
shutdown -s -t 1
在此文件中。保存并关闭 bat 文件。现在您可以将两个文件移动到首选目录。之后,您可以单击Right Mouse Buttonbat 文件并创建此文件的快捷方式。然后Right Mouse Button单击捷径这次选择固定到开始菜单。这会将快捷方式添加到您的“开始”菜单。
现在,每次您想要关闭电脑并保存正在运行的程序以便在启动后自动启动时,您都可以使用此快捷方式。
编辑-包括命令行参数
由于您还想保存进程命令行参数,因此必须将填充数组和创建文件部分更改为以下内容:
# FILLING ARRAYS
Get-WmiObject Win32_Process | Where-Object { $_.Path -match "Program" } | foreach { $arr_names += $_.Name; $arr_paths += $_.CommandLine; }
# CREATING FILE
for($i = 0; $i -le $arr_names.count -1; $i++)
{
$out = $arr_paths[$i]
write-output $out | out-file "programs.bat" -append -Encoding ascii
}
变化在于现在使用 WMI 而不是 get-process。此外,这次必须省略引号。
注意
如果在执行脚本时出现错误,则可能是您对 powershell 的执行策略设置不正确。要更改它,您必须以管理员身份打开 powershell 控制台,并在要求确认时Set-ExecutionPolicy Unrestricted
输入Y
。就是这样。应该可以正常工作。
答案3
另一个选项是将要启动的软件链接拉到“开始”菜单中的“启动”文件夹中 - 虽然速度很慢,但可以工作。但它不会打开“之前”打开的程序,而只是一组预设程序。