IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Scripts/Batch Discussion :

Comment fermer un programme en barre des tâches ?


Sujet :

Scripts/Batch

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 8
    Points
    8
    Par défaut Comment fermer un programme en barre des tâches ?
    Bonjour à tous,

    je souhaite stopper une application tournant en barre des tâches, cela pour pouvoir la fermer avant un reboot automatique du PC. Ce programme doit être fermé proprement car il enregistre des données essentielles durant cette fermeture.

    J'ai cherché une solution du côté du VBscript sans succès. De même j'ai cherché sur google durant des jours...

    Existe t'il une solution pour soit fermer automatiquement ce logiciel proprement ?

    Sinon y a 'til un moyen de le mettre au premier plan et de programmer un Alt/F4 ?

  2. #2
    Inactif  
    Avatar de Mac LAK
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    3 893
    Détails du profil
    Informations personnelles :
    Âge : 49
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Octobre 2004
    Messages : 3 893
    Points : 4 846
    Points
    4 846
    Par défaut
    Avec juste du batch/script, ça ne va pas être simple. Par contre, avec un petit exécutable, tu peux envoyer à l'application un message WM_CLOSE / WM_QUIT, qui est l'équivalent de cliquer sur la case de fermeture (croix rouge), ce qui la fera fermer en sauvegardant les données si elle est correctement programmée, via un petit réglage des options au besoin.

    Mais quand la session se ferme, les applications sont normalement prévenues par messages (WM_QUERYSHUTDOWN / WM_SHUTDOWN) et peuvent alors prendre les actions adéquates : si tu as accès au code source de l'application, c'est plutôt de ce côté qu'il faut regarder. Si elle est correctement développée, elle devrait demander quoi faire lors de la fermeture de session ou sauvegarder automatiquement, puis se fermer.
    Mac LAK.
    ___________________________________________________
    Ne prenez pas la vie trop au sérieux, de toutes façons, vous n'en sortirez pas vivant.

    Sources et composants Delphi sur mon site, L'antre du Lak.
    Pas de question technique par MP : posez-la dans un nouveau sujet, sur le forum adéquat.

    Rejoignez-nous sur : Serveur de fichiers [NAS] Le Tableau de bord projets Le groupe de travail ICMO

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Salut et merci pour le tuyau

    j'ai fais quelques recherches sur la fonction WM_CLOSE et j'ai trouvé ceci en VBA :

    Code vb : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    Option Explicit
     
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
    Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hWnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long) As Long
     
    Private Const WM_CLOSE = &H10
     
    Private Sub Form_Load()
     
        Dim hWnd As Long
     
        hWnd = FindWindow(vbNullString, "Calculatrice")
        If hWnd <> 0 Then
            Call PostMessage(hWnd, WM_CLOSE, 0, 0)
        Else
            MsgBox "Impossible de trouver la fenêtre !", vbExclamation
        End If
     
    End Sub

    ça fonctionne sous excel, j'arrive à fermer ce que je veux.

    Est-il possible de transformer ça en executable ?

  4. #4
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    Salut;

    Quand Mac LAK fait allusion à un exécutable, il ne parle pas d'une macro ou d'un script VBA interprété, mais bien d'un langage de programmation. Dans la mesure où tu es débutant, et pour faire suite à ce qui a été dit dans le forum VBScript :

    Citation Envoyé par maxim_um Voir le message

    Enfin pour répondre à chris-57, un dernier mot sur le "code" VBA ci-dessus. Et bien, sache que c'est un script interprété (une macro), ainsi tu ne peux pas le compiler.

    Cela dit, ce serait quand même indécent de ma part de te laisser en plant. Je te poste une solution simple dans le forum Scripts/Batch
    Une solution simple serait de faire appel à «taskkill.exe».
    Si je prends pour exemple la calculatrice, ça s'écrirait de la manière suivante:

    Bonne continuation.

  5. #5
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    salut maxim_um et merci de ton aide.

    J'avais déjà trouvé la commande taskkill, mais elle kill le processus et ne permet pas une fermeture "propre".


    Quoi qu'il en soit je vais utiliser la commande par Excel car je maitrise bien le VBA et il me sera facile de faire un petit fichier pour fermer mes programmes.

  6. #6
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    Citation Envoyé par chris-57 Voir le message

    J'avais déjà trouvé la commande taskkill, mais elle kill le processus et ne permet pas une fermeture "propre".
    Qu'est-ce qui te fait croire ça ?

    Enfin, si ça peut te rassurer, tu peux aussi utiliser l'utilitaire «cmdow», il peut être téléchargé depuis son site officiel, sinon sache qu'il est inclus dans le package «com.zip».

    Pour la calculatrice, la syntaxe serait succinctement de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    cmdow calculatrice /cls

  7. #7
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par maxim_um Voir le message
    Qu'est-ce qui te fait croire ça ?
    tout simplement parce que cette commande est souvent utilisée pour tuer un processus récalcitrant.
    De plus si on l'utilise sur une appli, on nous demande pas par exemple d'enregistrer les modifs, ça ferme le prog directement.

    Dans mon cas, lors d'une fermeture "propre", le logiciel me demande confirmation. Avec Taskkill pas de demande. Donc pas non plus d'écriture de la dll essentielle lors de la fermeture.

    Je vais étudier cmdow, merci !

  8. #8
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    En fait, taskkill, dans sa version standard, kill un processus seulement lorsque tu précises le paramètre «/F», en l'absence de ce dernier, il ne fait qu'envoyer un message WM_CLOSE.

    Essaies de faire un test avec notepad.exe par exemple.

    tu ouvres notepad,
    tu tapes quelques caractères dans la zone d'édition

    et tu lances

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    taskkill /im notepad.exe
    Si tu utilises une version standard de taskkill, notepad devrait te demander s'il faut enregistrer le fichier.

    à l'inverse, si tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    taskkill /f /im notepad.exe
    Tu obtiens un kill en bonne et due forme.

    En tout cas, avec «cmdow» il ne devrait y avoir aucune ambiguïté, même si je reconnais que tu sembles avoir une version de Vista pour le moins très spéciale.

    Bonne continuation chris-57

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Mais c'est ce que je cherche depuis le début !! On m'a dit que c'était impossible en batch... alors qu'une ligne suffit !

    ça fait quand même 1 mois et 3 forums que je suis dessus... MERCI !!!!

    Bref ça fonctionne a merveille avec
    taskkill /im xxxxx.exe
    reste maintenant à résoudre le pb de la fenêtre de confirmation.

    Il faut que je récupère le focus puis que je simule la touche Left pour la touche Enter.
    Pour les touches il semble que la commande est Send{("Left" )}


    [Edit] Effectivement ma version de Vista est pourrie ! C'est lent à souhait (2min pour rebooter) et tout est surchargé (même en supprimant un max de bêtises microsoft de vista).
    Mes 2 autres PC sont sur XP Pro "light" et tournent du tonnerre ! Même mon vieux Pentium 4 est plus rapide...mais j'ai pas trop le temps de formater celui-ci car il me faut 1 journée pour tout réinstaller...

  10. #10
    Membre éprouvé
    Avatar de maxim_um
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    895
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 895
    Points : 1 018
    Points
    1 018
    Par défaut
    Salut,

    Citation Envoyé par chris-57 Voir le message
    Mais c'est ce que je cherche depuis le début !! On m'a dit que c'était impossible en batch... alors qu'une ligne suffit !

    ça fait quand même 1 mois et 3 forums que je suis dessus... MERCI !!!!
    C'est l'un des secrets les mieux gardés.
    En fait, la vérité, c'est qu'il n’y a pas beaucoup de gens qui le savent, et pourtant, l'ancêtre kill.exe (le prototype pour Windows date de 1993, il faudrait que je contrôle mes archives pour m'en assurer) était déjà conçu ainsi.

    Citation Envoyé par chris-57 Voir le message

    reste maintenant à résoudre le pb de la fenêtre de confirmation.

    Il faut que je récupère le focus puis que je simule la touche Left pour la touche Enter.
    Pour les touches il semble que la commande est Send{("Left" )}

    Par contre, ça, tu n'en avais pas parlé, et c'est problématique.

    Bon, il y a quelques minutes, j'ai téléchargé le programme en question (stealthnet 0.8.7.1 .NETv2), et bonne nouvelle, dans les préférences, t'as juste à désactiver "Show MessageBoxes" ("Afficher fenêtre de messages") pour ne plus être embêté par la demande de confirmation.

    Cependant, parfois il se comporte anormalement. Ça se corrige facilement par un appel de ce genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    taskkill /im StealthNet.exe& taskkill /im StealthNet.exe
    Voilà chris-57,

    Bon amusement.

  11. #11
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 8
    Points
    8
    Par défaut
    Citation Envoyé par maxim_um Voir le message
    C'est l'un des secrets les mieux gardés.
    lol et j'ai percé le secret


    Merci Maxim_um pour ton aide et pour le temps que tu as passé à cherche une solution !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 27/08/2014, 23h07
  2. Réponses: 7
    Dernier message: 01/08/2006, 16h02
  3. [barre des tâches]Faire clignoter mon programme
    Par Baptiste Wicht dans le forum Interfaces Graphiques en Java
    Réponses: 10
    Dernier message: 05/06/2006, 20h20
  4. Comment masquer le MessageBox de la barre des tâches ?
    Par Coussati dans le forum Langage
    Réponses: 7
    Dernier message: 25/08/2003, 14h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo