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

VBScript Discussion :

Fermer proprement/mettre au 1er plan un logiciel


Sujet :

VBScript

  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 Fermer proprement/mettre au 1er plan un logiciel
    Bonjour à tous,

    voilà près de 2 semaines que je cherche une solution pour fermer proprement un logiciel quelconque.
    J'ai fouillé le net avec différents mots clefs, sans succès. J'ai cherché du côté des batch, à partir d'une macro Excel, à partir de Super Macro, pas moyen...

    Alors sur les conseils d'un internaute je me tourne vers un langage que je connais peu : le VBScript.

    J'ai un logiciel qui tourne en tâche de fond nommé stealthnet (réduit en barre des tâches). Ce logiciel doit absolument être fermé proprement, et non par un kill, car il écrit des données importantes lors de la fermeture.

    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 ?


    au secours VBScript Kenobi, vous êtes mon seul espoir.


    ..


    NB : demain j'arrête la télé...

  2. #2
    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
    c'est pas faisable ??

  3. #3
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040

  4. #4
    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
    Merci pour le lien. J'avais déjà vu ce code mais je ne sais pas l'adapter à mon cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set WshShell = WScript.CreateObject("WScript.Shell")
       WshShell.Run "calc" 
       WScript.Sleep 200
       WshShell.SendKeys " 	{%F4}"
    bon ça donnerai un truc comme ça, le problème est que mon logiciel est déjà en service dans la barre des tâches.
    Avant de lui envoyer une combinaison clavier, je dois le mettre au premier plan, et ça je trouve pas ...

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par chris-57 Voir le message
    Merci pour le lien. J'avais déjà vu ce code mais je ne sais pas l'adapter à mon cas.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set WshShell = WScript.CreateObject("WScript.Shell")
       WshShell.Run "calc" 
       WScript.Sleep 200
       WshShell.SendKeys " 	{%F4}"
    bon ça donnerai un truc comme ça, le problème est que mon logiciel est déjà en service dans la barre des tâches.
    Avant de lui envoyer une combinaison clavier, je dois le mettre au premier plan, et ça je trouve pas ...
    ton logiciel c'est la calculatrice "calc" ?

    ".Run" c'est pour le lancer .. elle n'est pas déjà lancée ton application ?

    relis le code de la et vois si tu arrive à faire "marcher" le
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
       WshShell.AppActivate "Calculatrice"  '-- Active l'application
    pour mettre ton application au premier plan ..(afin qu'elle prenne en compte l'action sur les touches...

  6. #6
    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
    oui oui, comme je le dis au dessus mon application est déjà lancée.
    j'ai tenté :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set WshShell = WScript.CreateObject("WScript.Shell")
        WshShell.AppActivate "stealthnet.exe"
        WScript.Sleep 200
        WshShell.SendKeys "{%F4}"
    mais rien ne se passe...

  7. #7
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 112
    Points : 16 645
    Points
    16 645
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WshShell.AppActivate "stealthnet.exe"



    Citation Envoyé par MSDN
    Expression de chaîne indiquant le titre dans la barre de titre de la fenêtre d'application à activer. Pour activer une application, vous pouvez utiliser l'identificateur de tâche renvoyé par la fonction Shell à la place de l'argument title.

  8. #8
    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
    heuuu pour moi c'est du charabia !

    quelqu'un peut me traduire ?

  9. #9
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Il ne faut pas passer en paramètre à AppActivate le nom du fichier .exe mais le titre de la fenêtre associé à ce .exe :
    indiquant le titre dans la barre de titre de la fenêtre d'application à activer

  10. #10
    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
    merci !


    j'ai essayé mais ça ne marche pas. Même avec la calculatrice, cette commande ne la passe pas au premier plan

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Set WshShell = WScript.CreateObject("WScript.Shell")
    	WshShell.AppActivate "Calculatrice"

  11. #11
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 040
    Points
    20 040
    Par défaut
    Citation Envoyé par chris-57 Voir le message
    ..
    j'ai essayé mais ça ne marche pas. Même avec la calculatrice, cette commande ne la passe pas au premier plan
    ...
    elle devrai ... j'ai pas de problème...

  12. #12
    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;

    Le fait de l'activer ne la fait pas forcément passer au premier plan. En fait, elle obtient juste le focus.
    Mais cela ne l'aurait pas empêché de fonctionner si la séquence de frappes utilisées pour Alt+F4 n'était pas erronée (et à condition bien sûr, qu'il n'y ait qu'une seule instance d'une application avec comme titre "calculatrice").

    Il aurait fallu écrire: "%({F4})"

    Par contre, il faut savoir que la méthode «AppActivate» n'est pas du tout fiable. Je déconseille son utilisation avec un titre de fenêtre, car si elle ne trouve aucune correspondance, son comportement sera indéterminé.
    Il est ainsi plus prudent de l'associer à un PID (ProcessID). Bien sûr, ceci n'empêche pas de s'assurer de la réussite de l'opération (en testant la valeur de retour de AppActivate) avant de transmettre la séquence de touches, dans quel cas le remède serait pire que le mal.

    Ça fait un bail que j'ai pas posté dans cette section du forum.

  13. #13
    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
    merci pour ton aide, mais comme je le précise je suis débutant en VBScript, donc je comprends rien à ce que tu me dis.

    Personne ne peut me mettre un exemple ?

  14. #14
    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,

    Je suis vraiment débordé, je te propose ainsi une petite ébauche, en premier lieu pour te dépanner, ensuite sache aussi qu'il est aisé de la faire évoluer. S'il y en a qui sont tenté, ils ont quartier libre. Il serait par exemple intéressant d'inclure la prise en charge de paramètres, enfin les possibilités sont nombreuses.

    Quoi qu'il en soit, voici l'ébauche en question, avec pour exemple la calculatrice. En espérant que mes souvenirs sur le langage sont encore bons :


    L'image calculatrice.png est hébergée sur http://files.getwebb.org

    CloseApp.vbs :
    Code : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
     
    'CloseApp Sample 11/11/2009, 15h40 by maxim_um
    'for http://www.developpez.net/forums/d829422/autres-langages/general-visual-basic-6-vbscript/vbscript/fermer-proprement-mettre-1er-plan-logiciel/
    'Not Warranty
    'Enjoy;
     
    Option Explicit
    Dim oWShell, iRetErr, sWMC, sAppTitle
     
    iRetErr=1
    sWMC="%({F4})"
    sAppTitle="calculatrice"
     
    Set oWShell= WScript.CreateObject("WScript.Shell")
     
    sub SendWMClose ( byval sAppTitleOrPID)
       If (oWShell.AppActivate (sAppTitleOrPID)) Then
            'WScript.Sleep 200
            oWShell.SendKeys sWMC
            oWShell.Popup "Opération terminée",2,sAppTitleOrPID, vbInformation 
            iRetErr=0
       else
            oWShell.Popup "Une erreur a eu lieu",3,sAppTitleOrPID, vbCritical 
            end if 
    end sub
     
    SendWMClose sAppTitle
    Set oWShell=Nothing
    WScript.Quit(iRetErr)
    Bien sûr, toutes les réserves citées sur mon précédent poste s'y appliquent. Si j'ai un peu de temps, je ferais quelque chose de plus aboutit, notamment en ce qui concerne le PID. Enfin une dernière chose, les solutions en batch/script cmd existent, donc tu peux aussi utilement poser ta question sur le forum dédié.

    Enjoy;

  15. #15
    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
    Merci maxim_um !!!

    malheureusement ça ne fonctionne que si la calculatrice est maximisée. Si je la minimise dans la barre des tâches, il indique une erreur.

  16. #16
    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,

    J'avais testé tous les états possibles et classiques de la calculatrice avant de te le fournir.
    Je viens de refaire des tests, sur 3 machines Windows XP SP2 PRO, avec l'interpréteur wscript par défaut, et cette fois-ci j'ai simulé une pleine charge du disque et du processeur et pourtant je ne rencontre aucun souci non plus.

    Si tu pouvais apporter plus de détail, notamment sur ton système d'exploitation, et si quelqu'un d'autre pouvait aussi tester, ce serait bien.

  17. #17
    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
    On appelle ce genre d'intervention un «troll», ne t'inquiète pas.

    Pour en revenir à ton problème, il faudrait que quelqu'un puisse tester sur Vista. Je t'invite ainsi à te connecter au chat et faire une demande dans ce sens.

    Cela dit, j'ai quand même pris cinq minutes pour te proposer une alternative en passant cette fois-ci par le PID. Voici le script :

    Code : 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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
     
    'CloseApp Sample 13/11/2009,  13h40 by maxim_um
    'for http://www.developpez.net/forums/d829422/autres-langages/general-visual-basic-6-vbscript/vbscript/fermer-proprement-mettre-1er-plan-logiciel/
    'Not Warranty
    'Enjoy
     
    Option Explicit
    Dim oWShell, oWMIService, oAllProcesses, oProcess, iRetErr, sWMC, sAppTitle, sAppFile, sAppName, sComputer
     
    iRetErr=1
    sWMC="%({F4})"
    sComputer= "."
    sAppTitle="calculatrice"
    sAppName="calculatrice"
    sAppFile="calc.exe"
     
    Set oWShell= WScript.CreateObject("WScript.Shell")
     
    sub SendWMClose ( byval spAppName, byval spAppTitleOrPID)
      If (oWShell.AppActivate (spAppTitleOrPID)) Then
    	'WScript.Sleep 200
    	oWShell.SendKeys sWMC
    	oWShell.Popup "Opération terminée",2, spAppName, vbInformation 
    	iRetErr=0
      else
    	oWShell.Popup "Une erreur a eu lieu",3,spAppName, vbCritical 
      end if 
    end sub
     
    sub CloseByPID ( byval spAppName, byval spAppFile)
      Set oWMIService = GetObject("winmgmts:\\" & sComputer & "\root\cimv2")
      Set oAllProcesses = oWMIService.ExecQuery("SELECT * FROM Win32_Process Where Name =" & "'" & spAppFile & "'")
      If (oAllProcesses.Count-1=0) Then
    	'! Indexation pour objets WMI non disponible.
    	For Each oProcess In oAllProcesses
    	   SendWMClose spAppName, oProcess.ProcessID
    	Exit For
    	Next
      'else
    	'oWShell.Popup "Une erreur a eu lieu",3,spAppName, vbCritical   
      end IF
    end sub
     
    'SendWMClose sAppTitle
    CloseByPID sAppName, sAppFile
    Set oWShell=Nothing
    Set oWMIService=Nothing
    WScript.Quit(iRetErr)

    Si jamais ça ne fonctionne toujours pas, et comme je n'ai pas la possibilité de tester moi-même sur Vista, à ce moment-là, il te sera plus profitable de reformuler ta demande initiale, mais cette fois-ci, dans le forum Scripts/Batch. Comme je te l'ai précédemment suggéré, tu verras que des solutions beaucoup plus simples et très efficaces existent.

    Bonne continuation.

  18. #18
    Rédacteur
    Avatar de omen999
    Profil pro
    Inscrit en
    Février 2006
    Messages
    1 301
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 1 301
    Points : 3 560
    Points
    3 560
    Par défaut
    On appelle ce genre d'intervention un «troll», ne t'inquiète pas.
    je ne crois pas qu'il était vraiment inquiet
    cela étant, mon commentaire était laconique mais pas trollesque
    la fonction sendkeys est souvent neutralisée par l'User Interface Privilege Isolation introduit par vista et son comportement
    dépend étroitement du statut de l'utilisateur et/ou de l'activation de l'uac
    il existe également des solutions (compliquées) qui utilisent l'api

  19. #19
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 112
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2004
    Messages : 6 112
    Points : 16 645
    Points
    16 645
    Par défaut
    Citation Envoyé par omen999 Voir le message
    je ne crois pas qu'il était vraiment inquiet
    cela étant, mon commentaire était laconique mais pas trollesque
    la fonction sendkeys est souvent neutralisée par l'User Interface Privilege Isolation introduit par vista et son comportement
    dépend étroitement du statut de l'utilisateur et/ou de l'activation de l'uac
    il existe également des solutions (compliquées) qui utilisent l'api
    Je suis de ton avis, car j'ai essayé avec Windows 2K et Vista Edition Familiale Premium, le comportement et différent.
    Sous 2K, fonctionne à tous les coups, sous Vista, un coup çà fonctionne, un autre non.
    Pour information, sous Vista en VB6, déclenche l'erreur N°5, Argument ou appel de procédure incorrect
    Bien que cela ne soit pas une réponse, l'utilisation de Sendkeys reste de toutes façons des plus aléatoire.

  20. #20
    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
    merci pour votre aide.

    j'ai finalement posté sur le topic Scripts/Batch qui m'a mis sur une piste :
    Code : 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 si je le met dans excel.

    Par contre y a t'il un moyen d'en faire un executable ?

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. [AC-2010] Aprés une fusion avec Word, comment mettre la page crée au 1er plan ?
    Par Razmote dans le forum VBA Access
    Réponses: 0
    Dernier message: 29/01/2015, 12h26
  2. [AC-2003] Mettre au 1er plan
    Par louzz dans le forum IHM
    Réponses: 2
    Dernier message: 24/08/2010, 16h48
  3. Mettre la JFrame à son ouverture au 1er plan
    Par Invité dans le forum Agents de placement/Fenêtres
    Réponses: 19
    Dernier message: 18/01/2007, 15h27
  4. [VB.NET] Mettre une form au 1er plan
    Par Aspic dans le forum VB.NET
    Réponses: 13
    Dernier message: 15/11/2005, 13h51
  5. [MFC] mettre une fenêtre en 1er plan
    Par bigboomshakala dans le forum MFC
    Réponses: 4
    Dernier message: 14/05/2004, 17h39

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