Démarrer Windows avec les programmes précédemment ouverts

6

J'utilise Windows 7 64 bits. Lorsque je ferme mon ordinateur, de nombreux programmes sont ouverts sur le bureau. Lorsque je démarre mon ordinateur, je veux que ces programmes s’ouvrent automatiquement. Je suis conscient de SaveMyCache, cela nécessite que je coche des cases à chaque fois que j'éteigne mon ordinateur, je veux quelque chose d'automatique.

Barre de tonte
la source
3
Je ne pense pas que Windows fasse au moins quelque chose d'assez similaire. Avez-vous envisagé l'hibernation (les programmes ne se ferment pas) ou l'utilisation du Startupdossier (ils seront redémarrés lors de la connexion)?
un CVn
1
Quelques questions à poser: vous souhaitez revenir complètement à l'état précédent de manière à ce que les fichiers ouverts de certains programmes soient également ouverts dans ce programme après le redémarrage, ou voulez-vous simplement démarrer des programmes précédemment utilisés? La seconde peut être effectuée si vous souhaitez utiliser un raccourci personnalisé pour une procédure d'arrêt. Le premier est vraiment vraiment improbable pour la plupart des programmes. Sublime text ouvrira automatiquement les fichiers précédemment utilisés, mais il s’agit là d’un comportement exceptionnel et plutôt rare.
mnmnc
Ma solution serait de créer un script qui effectuera la procédure d'arrêt. Mais tout d’abord, il liste tous les programmes en cours d’exécution lancés par compte utilisateur, crée une liste des chemins de ces exécutables et le place dans le .batfichier qui sera placé dans le dossier de démarrage de l’utilisateur. Après ces actions, le script sera exécuté shutdown -s -t 1et arrêté. Après le démarrage, tous les programmes en cours d’exécution seront redémarrés.
mnmnc
@mnmnc je veux simplement ouvrir les programmes pas nécessairement les fichiers. Je n'ai aucun fond de programmation, alors comment utiliser un "raccourci personnalisé pour une procédure d'arrêt"?
Barre de tonte
@MowingBar Hey. J'ai créé un script juste pour vous. Vous pouvez voir ma réponse ci-dessous. Le script fait exactement ce que vous souhaitiez - enregistre la liste des programmes en cours d'exécution et les lance après le prochain démarrage.
mnmnc

Réponses:

9

Quelque chose qui se rapproche de ce que vous demandez: Activez l'hibernation dans la gestion de l'alimentation et, au lieu d'éteindre votre PC, utilisez l'option de mise en veille prolongée. Cela éteint votre ordinateur et le restaure dans l'état où vous vous trouviez lorsque vous avez éteint le système.

Autre que cela, il n'y a pas de fonctionnalité intégrée qui fait ce que vous demandez. Le gestionnaire de redémarrage Windows a été créé pour ce type de situation, mais les logiciels doivent le prendre en charge. Ce gestionnaire est généralement utilisé uniquement lors de l'installation d'un nouveau logiciel ou de l'installation de mises à jour.

Jeroen Landheer
la source
2
Je voulais simplement ajouter que lorsque votre PC doit redémarrer pour appliquer des mises à jour ou finaliser une installation, vous devez éteindre votre PC au lieu de le mettre en veille prolongée.
Nolonar
2

J'ai donc décidé de créer ce script Powershell.

Projet Github ici .

Version avec capture des arguments de processus également.

Les actions effectuées:

  1. Supprimer le fichier précédent.
  2. Vérifiez les processus en cours.
  3. Filtrez la liste par chemin contenant un mot spécifique ( Programme ) qui suppose que tous les programmes sont installés dans Program Files ou Program Files (x 86).
  4. Obtenir les chemins absolus vers les exécutables des processus trouvés
  5. Écrire des chemins dans un fichier temporaire dans le répertoire temporaire.
  6. Déplacez le fichier temporaire dans le répertoire de destination situé dans le dossier de démarrage de l'utilisateur.

Avantages:

  • Écrit dans PowerShell, le code est natif et devrait fonctionner sous Windows Vista et supérieur.
  • Travaux.

Les inconvénients:

  • Les programmes installés dans un autre chemin - pas sous les fichiers de programme - ne seront pas repris dans cette version. Cela est bien sûr nécessaire pour éviter le démarrage de processus Windows natifs tels que explorer.exe, etc. Cependant, si vous avez un chemin comme celui D:\Appsoù vous installez également des programmes, vous pouvez modifier la ligne.

    $ _. Path -match "Programme"

    à

    $ .Path -match "Programme" -ou $ .Path -match "D: \ Apps"

    et cela fonctionnera tout de même.

Maintenant le code de script:

###############################
# 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 copier ce code et le coller dans le fichier shutdown.ps1sur votre bureau. Enregistrez et fermez ce fichier. Maintenant, créez un deuxième fichier shutdown.batet mettez le code

powershell shutdown.ps1
shutdown -s -t 1

dans ce fichier. Enregistrez et fermez le fichier bat. Vous pouvez maintenant déplacer les deux fichiers vers le répertoire préféré. Après cela, vous pouvez cliquer avec Right Mouse Buttonsur un fichier de batte et créer un raccourci vers ce fichier. Cliquez ensuite sur avec Right Mouse Buttonun raccourci et choisissez Épingler au menu Démarrer . Cela ajoutera le raccourci à votre menu Démarrer.

Maintenant, chaque fois que vous voulez fermer le PC et enregistrer les programmes en cours pour un démarrage automatique après le démarrage, vous pouvez utiliser ce raccourci.


Edition - Incluant les arguments en ligne de commande

Etant donné que vous souhaitez également enregistrer les arguments de ligne de commande de processus, vous devez modifier les sections Remplissage de tableaux et Création de fichier en:

# 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
}

Le changement consiste à utiliser WMI maintenant au lieu de get-process. De plus, les guillemets doivent être omis cette fois.


Remarquer

Si vous rencontrez une erreur lors de l'exécution du script, les paramètres de la stratégie d'exécution pour Powershell sont incorrects. Pour changer cela, vous devez ouvrir la console PowerShell en tant qu'administrateur, puis saisissez-le Set-ExecutionPolicy Unrestrictedet saisissez-le Ylorsque vous êtes invité à confirmer. C'est ça. Devrait bien fonctionner.

mnmnc
la source
Cela a l'air génial, et je vais l'essayer bientôt. Est-ce que cela (Get-Process) ne capturera que le processus "D: \ path \ program.exe", ou sera-t-il également en mesure de capturer le processus en ligne de commande complète ou en arguments de ligne de commande?
Kevin Fegan
@KevinFegan Par défaut, cela ne capture pas les arguments de la ligne de commande, car ceux-ci ne font pas partie de l'objet Process, à ma connaissance. Cependant, j'ai étendu ma réponse avec Edit et inclus le code permettant de capturer les arguments de ligne de commande . Je l'ai testé de mon côté et cela fonctionne bien. Faites-moi savoir si cela fonctionne pour vous.
mnmnc le
0

Une autre option consiste à extraire des liens vers des logiciels pour démarrer dans le dossier "Démarrage" du menu Démarrer. Il est lent, mais fonctionne. Il n'ouvre cependant pas les programmes "précédemment" ouverts, mais juste un ensemble prédéfini.

Hannu
la source