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

VB 6 et antérieur Discussion :

Word tuer processus word ouvert avec VB6 sans fermer les autres docuemnts word


Sujet :

VB 6 et antérieur

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 293
    Points : 96
    Points
    96
    Par défaut Word tuer processus word ouvert avec VB6 sans fermer les autres docuemnts word
    Bonjour
    je voudrais pouvoir tuer un processus word ouvert avec vb6 sans fermer les autres documents word déjà ouverts

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    Dim objWord As Word.Application
    Set objWord = CreateObject("Word.Application")
    objWord.Visible = True    
    ouvreWord = True
    ...
    Mais je n'y parviens pas

    Auriez-vous des idées ?
    merci d'avance
    Cpf

  2. #2
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 805
    Points
    5 805
    Par défaut
    Peut-être ce code en VBScript pour un exemple simple avec Notepad.exe:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Set WS = CreateObject("WScript.Shell")
     Set Ex = WS.Exec("Notepad.exe")
    strComputer = "." 
    Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2") 
    Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process",,48) 
      For Each objItem in colItems 
        If objItem.ProcessId =Ex.ProcessId Then 
            Wscript.Echo "ProcessId: " & objItem.ProcessId
            objItem.Terminate
            Exit For 
        End If
     Next
    Reste à l'adapter selon le besoin.
    Pour le tester, il suffit de lancer une ou plusieurs instances de Notepad puis exécuter le code pour voir le PID de l'instance lancée par celui-ci. Après clic sur le bouton OK(OUI), la seule instance fermée est celle lancée par le code.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 293
    Points : 96
    Points
    96
    Par défaut
    Merci
    Je l'ai testé et ça me semble une bonne solution ... à adapter car tout ne fonctionne pas correctement comme le "terminate"
    Je cherche donc la liste des propriétés et fonctions qui pourraient me convenir
    Merci encore
    Cpf

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 293
    Points : 96
    Points
    96
    Par défaut
    La routine s'arrête sur
    "objItem.Terminate"
    en donnant une erreur :
    "run-time error '-2147217406(80041002'):
    Non trouvé "

    Merci d'avance
    Cpf

  5. #5
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 805
    Points
    5 805
    Par défaut
    La routine s'arrête sur "objItem.Terminate"
    Dans le cas de Winword.exe, il faudrait mettre le chemin complet de l'application dans l'instruction Set Ex = WS.Exec("Notepad.exe").
    pour avoir quelque chose comme Set Ex = WS.Exec("C:\Program Files\Microsoft Office\OFFICE11\Winword.exe").
    car ce dossier n'est pas répertorié dans la variable d'environnement "PATH".
    Or si on regarde dans les propriétés du raccourci Winword.exe dans le menu programme, le champ "Démarrer dans ..." est vide et le champ Cible ne contient pas de chemin vers l'application.
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    293
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2006
    Messages : 293
    Points : 96
    Points
    96
    Par défaut
    Merci pour la réponse
    En somme cette routine fontionne. Le problème reste que je dois intégrer ce principe dans le code existant qui lui génère un objet du type "word.application" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim objWord As Word.Application
    Set objWord = CreateObject("Word.Application")
    ... et je ne vois pas comment intégrer les 2
    donc avec le :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Set WS = CreateObject("WScript.Shell")
    Set Ex = WS.Exec("winword.exe")
    y aurait-il dans l'objet word.application une propriété qui donne l'id du process ?

    Merci d'avance

  7. #7
    Modérateur
    Avatar de l_autodidacte
    Homme Profil pro
    Retraité : Directeur de lycée/Professeur de sciences physiques
    Inscrit en
    Juillet 2009
    Messages
    2 415
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Retraité : Directeur de lycée/Professeur de sciences physiques
    Secteur : Enseignement

    Informations forums :
    Inscription : Juillet 2009
    Messages : 2 415
    Points : 5 805
    Points
    5 805
    Par défaut
    Il y a peut-être cette possibilité tout en travaillant avec l'objet WD qui donne accès aux différentes propriétés de l'application :
    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
    Dim PID& ' ProcessId
    Dim WD As New Word.Application
     
    Private Sub Command1_Click()
        PID = Shell("C:\Program Files\Microsoft Office\OFFICE11\Winword.exe") ' Lancement de l'application
        MsgBox PID ' Affiche le PID
    End Sub
     
    Private Sub Form_QueryUnload(Cancel As Integer, UnloadMode As Integer)
     
       strComputer = "."
       Set objWMIService = GetObject("winmgmts:\\" & strComputer & "\root\CIMV2")
       Set colItems = objWMIService.ExecQuery("SELECT * FROM Win32_Process", , 48)
         For Each objItem In colItems
           If objItem.ProcessId = PID Then
               MsgBox "ProcessId: " & objItem.ProcessId  ' juste pour vérifier qu'on a le même PID
               objItem.Terminate                                    'Arrêt de l'application appelée par son PID
               Exit For
           End If
        Next
    End Sub
    Ne pas oublier le tag si satisfait.
    Voter pour toute réponse satisfaisante avec pour encourager les intervenants.
    Balises CODE indispensables. Regardez ICI
    Toujours utiliser la clause Option Explicit(VBx, VBS ou VBA) et Ne jamais typer variables et/ou fonctions en VBS.
    Vous pouvez consulter mes contributions
    Ne pas oublier de consulter les différentes FAQs et les Cours/Tutoriels VB6/VBScript
    Ne pas oublier L'Aide VBScript et MSDN VB6 Fr

Discussions similaires

  1. Réponses: 0
    Dernier message: 24/04/2015, 11h27
  2. Réponses: 6
    Dernier message: 10/05/2010, 08h24
  3. Utilisation de Project avec VB6 sans avoir installer Project sur le PC (DLL?)
    Par bibiGN dans le forum Installation, Déploiement et Sécurité
    Réponses: 3
    Dernier message: 28/05/2009, 13h46
  4. envoyer mail avec VB6 sans message
    Par alexxx69 dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 20/11/2006, 15h33

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