使用先前打开的程序启动Windows


6

我正在运行Windows 7 64位。当我关闭计算机时,我在桌面上打开了许多程序。当我启动计算机时,我希望这些程序自动打开。我知道SaveMyCache,这需要我在每次关闭计算机时都勾选复选框,我想要自动的东西。


3
我认为Windows至少不会在本地执行类似的操作。您是否考虑过休眠(程序不会退出)或使用Startup文件夹(它们将在登录时重新启动)?
2014年

1
需要问几个问题:您想完全返回到以前的状态,以便重新启动后也可以在此程序中打开某些程序中打开的文件,还是只想启动以前使用的程序?如果您愿意将自定义快捷方式用于关闭过程,则可以完成第二步。对于大多数程序来说,第一个是真的。Sublime文本将自动打开以前使用的文件,但这是一个例外,而且非常罕见。
mnmnc

我的解决方案是创建一个将执行关闭过程的脚本。但是首先,它将列出所有正在运行并由用户帐户启动的程序,创建这些可执行文件的路径列表.bat,并将其放置在将放置在用户启动文件夹中的文件中。完成这些操作后,脚本将执行shutdown -s -t 1并退出。引导后,所有正在运行的程序将再次启动。
mnmnc

@mnmnc我只是想打开程序,不一定要打开文件。我没有编程背景,因此如何使用“关闭程序的自定义快捷方式”?
Mowing Bar

@MowingBar嘿。我已经为您创建了一个脚本。您可以在下面看到我的答案。该脚本仅执行所需的操作-保存正在运行的程序列表,并在下次启动后启动它们。
mnmnc

Answers:


9

接近您要求的内容:在电源管理中启用休眠模式,而不是关闭PC,请使用休眠选项。这确实会关闭PC的电源,并使PC恢复到关闭系统电源时的状态。

除此之外,没有内置功能可以满足您的要求。Windows重新启动管理器是为这种情况而创建的,但是软件需要支持它,并且通常仅在安装新软件或安装更新时使用。


2
我只是想补充一下,当您的PC需要重启以应用某些更新或完成安装时,您需要关闭PC而不是使其休眠。
Nolonar 2014年

2

因此,我决定创建此Powershell脚本。

Github项目在这里

带有捕获过程参数的版本。

执行的动作:

  1. 删除以前的文件。
  2. 检查正在运行的进程。
  3. 按包含特定单词(Program)的路径过滤列表,该单词假定所有程序都安装在Program FilesProgram files(x86)中
  4. 获取找到的进程的可执行文件的绝对路径
  5. 将临时文件的路径写入temp目录中。
  6. 将临时文件移到用户的“启动”文件夹的目标目录中。

优点:

  • 用powershell编写,因此代码是本机代码,应该可以在Windows Vista及更高版本中使用。
  • 作品。

缺点:

  • 安装在其他路径中的程序-不在程序文件下-在此版本中不会被拾取。当然,这是避免启动本机Windows进程(例如explorer.exe等)所必需的。但是,如果您的路径类似于D:\Apps安装程序的路径 ,则可以修改该行

    $ _。Path -match“程序”

    $ .Path -match“ Program”-或$ .Path -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

Simpy复制此代码并将其粘贴shutdown.ps1到桌面上的文件中。保存并关闭此文件。现在创建第二个文件shutdown.bat并放入代码

powershell shutdown.ps1
shutdown -s -t 1

在此文件中。保存并关闭bat文件。现在,您可以将两个文件都移动到首选目录。之后,您可以单击Right Mouse Buttonbat文件并创建该文件的快捷方式。然后点击与Right Mouse Button上一个快捷方式这个时间,选择固定到开始菜单。这会将快捷方式添加到“开始”菜单中。

现在,每次您要关闭PC并保存正在运行的程序以在启动后自动启动时,都可以使用此快捷方式。


编辑 - 包括命令行参数

由于您还希望保存流程命令行参数,因此必须将“填充数组”和“创建文件”部分更改为:

# 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要求确认时输入。而已。应该工作正常。


这看起来很棒,我会尽快尝试。这个(Get-Process)是仅捕获进程“ D:\ path \ program.exe”,还是(可以)捕获整个命令行或命令行参数的进程?
凯文·费根

@KevinFegan默认情况下,这不会捕获命令行参数,因为据我所知,它们不是Process对象的一部分。但是,用Edit 扩展了答案,并且还包括捕获命令行参数的代码。我已经对它进行了测试,并且效果很好。让我知道这是否适合您。
mnmnc 2014年

0

另一个选项是将指向软件的链接拉到“开始”菜单的“启动”文件夹中-速度很慢,但是可以使用。但是,它不会打开“以前”打开的程序,而只是打开一个预设集。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.