Запустить Windows с ранее открытыми программами

Запустить Windows с ранее открытыми программами

Я использую Windows 7 64 бит. Когда я выключаю компьютер, на рабочем столе открывается много программ. Когда я включаю компьютер, я хочу, чтобы эти программы открывались автоматически. Я знаю о SaveMyCache, он требует от меня ставить галочки каждый раз, когда я выключаю компьютер, я хочу что-то автоматическое.

решение1

Что-то близкое к тому, о чем вы спрашиваете: включите спящий режим в управлении питанием и вместо выключения ПК используйте опцию спящего режима. Это отключит питание ПК и восстановит его в состояние, в котором он был, когда вы выключили систему.

Кроме этого, нет встроенной функции, которая делает то, о чем вы просите. Менеджер перезапуска Windows был создан для таких ситуаций, но программное обеспечение должно поддерживать это, и это обычно используется только при установке нового программного обеспечения или обновлений.

решение2

Поэтому я решил создать этот скрипт Powershell.

Проект Github здесь.

Версия с захватом аргументов процесса.

Выполненные действия:

  1. Удалить предыдущий файл.
  2. Проверьте запущенные процессы.
  3. Отфильтровать список по пути, содержащему определенное слово (Программа), который предполагает, что все программы установлены либо вПрограммные файлыилиФайлы программ(x86)
  4. Получить абсолютные пути к исполняемым файлам найденных процессов
  5. Запишите пути к временному файлу во временном каталоге.
  6. Переместите временный файл в целевой каталог, то есть в папку «Автозагрузка» пользователя.

Плюсы:

  • Написано на PowerShell, поэтому код является родным и должен работать в Windows Vista и выше.
  • Работает.

Минусы:

  • Программы, установленные по другому пути - не в program files - не будут подхвачены в этой версии. Это, конечно, необходимо, чтобы избежать запуска собственных процессов Windows, таких как explorer.exe и т. д. Однако, если у вас есть путь, по которому D:\Appsвы также устанавливаете программы, вы можете изменить строку

    $_.Path -match "Программа"

    к

    $.Path -соответствует "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

Просто скопируйте этот код и вставьте его в файл 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

Другой вариант — перетащить ссылки на ПО для запуска в папку «Автозагрузка» в меню «Пуск» — это медленно, но работает. Но это не открывает «ранее» открытые программы, а только предустановленный набор.

Связанный контент