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 :

Killer une fenetre précise


Sujet :

VB 6 et antérieur

  1. #1
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 48
    Par défaut Killer une fenetre précise
    Salut,
    Je bloque un peu sur la gestion des processus.
    Le probleme vient du fait que j'arrive a killer des processus mais que par application.
    Exemple:
    ma commande ferme toutes les fenetres excel ouvertes

    Je voudrais pouvoir en fermer qu'une seule.
    Est il possible de récupérer le handle spécifique d'une fenetre?

    Sinon j'ai essayé de créer un tableau d'objet Process mais je pense qu'il me manque des référence pour que ca marche.
    Si j'arrive a faire marcher ca, ce serait bcp plus facile :

  2. #2
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Il faudra peut-être passer par les Objets de Excel (Workbook, pour ne nommer que celui-là, puisque c'est celui-là qu'il faut voir).

    Autrement, oui, c'est possible de récupérer le handle d'une autre fenêtre... Je ne me souviens plus exactement de la fonction (ou les fonctions) de l'API qu'il faut utiliser.

    Mais si tu ne traite que des fenêtres de document Excel, Je crois que l'objets Application et la collection Workbooks de Excel (en mettant une référence à Excel dans ton projet) fera l'affaire.

    Il y a quelques exemples généraux dans la FAQ.

    Si tu trouves pas, tu dis.

  3. #3
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 48
    Par défaut
    Bonjour zaza (si je peux me permettre),
    deja merci de m'aider encore une fois

    Je refais appel à ce forum car là je bloque vraiment.
    Je dois traiter des fichiers .xls et des .pdf donc je ne peux utiliser les objets de Excel pour obtenir un code generaliste.
    J'arrive effectivement à obtenir les handles des processus depuis la base de données qui gere les processus en cours.
    Le hic c'est que ceux-ci kill l'application entiere....

    Je ne sais pas comment récupérer le handle "fils" de la fenetre, tu pourrais m'aider?

  4. #4
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Dans un cas comme dans l'autre il te faut soit le nom interne de l'application qui a ouvert la fenêtre en question, soit une variable objet du type de l'application en question... donc une référence à ces applications. Sauf si l'éditeur (fabricant, programmeur, compagnie...) du programme Ne change (et ne changera) jamais le nom interne de ses applications au fil des différentes versions.

    À part Excel et Acrbat, ton application doit-elle (maintenant ou éventuellement) traiter d'autres types de fenêtres-documents ?

  5. #5
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 48
    Par défaut
    Non, pour l'instant il ne semble pas que le programme traite d'autre types de fichiers.
    Saurais tu comment gérer des objets de ce type?

  6. #6
    Membre Expert
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Par défaut
    Par cœur comme ça... non. Désolée. Ça nécessiterait presque autant de recherche pour moi que pour toi...

    J'ai une petite appli, quelque part dans mes archives, qui recueille le handle d'une application pour garder sa fenêtre au dessus de toutes les autres... Sais plus où j'ai planqué le code source...

    Ceci dit, il faut passer par les API, tu l'avais deviné , et connaitre le nom interne de l'appli en question... heu... je me répète, là, non ?

    Une adresse intéressante : Visual Basic Research Center. Le titre est en anglais, mais le site est en français...

  7. #7
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 48
    Par défaut
    OK merci beaucoup pour le site je vais faire les recherches... encore
    En tout merci pour ton aide, je fais mon stage a quebec et même sur le net je me fais aider par une canadienne, vous etes trop sympa ici, c vraiment le fun

    J'utilise des viewers pour lancer les fichiers xls et pdf
    Pour l'instant j'arrive à fermer les applications a partir des noms suivants :
    ExcelViewer : XLVIEW.EXE
    FoxitReader : FOXITR~1.EXE

  8. #8
    Membre averti
    Inscrit en
    Avril 2008
    Messages
    48
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 48
    Par défaut

    Ca y est!!!!!
    En faisant les recherches que tu m'as conseillé, je suis tomber sur la bonne utilisation de la fonction Shell().
    Sur la plupart des exemples, on trouve :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shell(CheminDuFichier, vbNormalFocus)
    Or il faut absolument spécifier le chemin du logiciel utilisé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Shell(CheminEXE & " " & CheminDuFichier, vbNormalFocus)
    J'ai donc pu utiliser la méthode Shell() (au lieu de ShellExecute()) qui renvoit le PID (son numero de processus) du processus lancé.
    Ainsi j'ai pu accéder a la table contenant les processus en cours et supprimer les fenetres lancés par mon application

    Declaration:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim nbPID As Integer
    Dim tabPID(1 To 100, 0) As Double
    Fonction:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    'Fonction qui sert a tuer un processur a partir de son PID
    Public Function KillProcess(ByVal PID As Double) As Boolean
        Dim svc As Object
        Dim sQuery As String
        Dim oproc
        Set svc = GetObject("winmgmts:root\cimv2")
        sQuery = "select * from win32_process where ProcessID = " & PID
        For Each oproc In svc.execquery(sQuery)
            oproc.Terminate
        Next
        Set svc = Nothing
     
    End Function
    utilisation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    While i < nbFic And Not trouve
        i = i + 1
        If Replace(CTL_affichDocs.ActiveCell.Address, "$", "") = tabFic(i, 1) Then
            If Right(tabFic(i, 2), 3) = "pdf" Then
                tabPID(nbPID, 0) = Shell("C:\Program Files\Foxit Software\Foxit Reader\Foxit Reader.exe" & " " & tabFic(i, 2), vbNormalFocus)
              Else
                tabPID(nbPID, 0) = Shell("C:\Program Files\Microsoft Office\OFFICE11\XLVIEW.EXE" & " " & tabFic(i, 2), vbNormalFocus)
            End If
            nbPID = nbPID + 1
        End If
    Wend
    Pour plus de compréhension:
    tabFic contient la liste des chemins de tous les fichiers disponibles
    tabPID contient la liste des numéros de processus de tous les fichiers ouverts

    Voila ca marche^^

    Et encore un gros MERCI à :zazaraignée

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

Discussions similaires

  1. Vaut il mieux cacher ou killer une fenetre
    Par chris81 dans le forum Framework .NET
    Réponses: 7
    Dernier message: 21/11/2007, 15h20
  2. [VB6] [Système] Récupérer le contenu d'une fenêtre DOS
    Par Nounours666 dans le forum VB 6 et antérieur
    Réponses: 16
    Dernier message: 18/11/2004, 16h38
  3. [VB6] Dimension d'une fenetre extérieure
    Par Ingham dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 22/01/2003, 16h52
  4. Aide sur une fenetre
    Par Ray-j dans le forum Autres éditeurs
    Réponses: 4
    Dernier message: 29/11/2002, 08h51
  5. gérer les jpg dans une fenetre directdraw???
    Par Anonymous dans le forum DirectX
    Réponses: 1
    Dernier message: 14/06/2002, 13h39

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