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 :

[VB6] Listage des fenêtres windows


Sujet :

VB 6 et antérieur

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 9
    Points : 7
    Points
    7
    Par défaut [VB6] Listage des fenêtres windows
    bonjour,

    Je me suis basé sur les exemples du forum et de "AllApi.net" pour lister et fermer une application windows dont je ne connais que le nom.
    Vb me sort une erreur dès l'éxecution sur EnumWindows :

    Utlisation incorrecte de l'opérateur AddressOf (cela commence mal)

    Voici mes qqes lignes:
    Private Sub Form_Load()
    EnumWindows AddressOf EnumWindowsProc, ByVal 0&
    End Sub
    Public Function EnumWindowsProc(ByVal hwnd As Long, ByVal lParam As Long) As Boolean

    Dim sSave As String, Ret As Long

    Ret = GetWindowTextLength(hwnd)
    sSave = Space(Ret)
    GetWindowText hwnd, sSave, Ret + 1
    If sSave = "Outlook" Then
    PostMessage hwnd, &H10, 0, 0
    End If
    Form1.Print Str$(hwnd) + " " + sSave

    'continue enumeration
    EnumWindowsProc = True

    End Function

  2. #2
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 117
    Points : 97
    Points
    97
    Par défaut
    Quelle erreur as-tu ?
    Ta fonction apellée est bien dans un module standard ? (sinon windows ne peut y accéder)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Utlisation incorrecte de l'opérateur AddressOf

  4. #4
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    As tu bien déclarer toutes les API dans ton module standard ?

    pour info, ca ca fonctionne, alors compare :
    http://www.mentalis.org/apilist/EnumWindows.shtml
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  5. #5
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 117
    Points : 97
    Points
    97
    Par défaut
    C'est que ta fonction apellée "EnumWindowsProc" n'est pas dans un module standard ... et forcément comme dit Thierry la fonction API devra suivre ... Lis les réponses qu'on te donne

  6. #6
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Je ne savais pas qu'il fallait placer les déclarations dans un module et non dans une feuille.
    Donc je n'est plus l'erreur mais la function pour trouver le nom d'une application ne me donne que ce qu'il y a dans la barre de titre avec "getwindowtext"
    j'ai essayé avec findwindow mais il faut mettre comme nom le nom entier qui s'affiche dans le gestionnaire de taches "onglet application".
    ex: je doit rechercher nom= "Boîte de réception - Microsoft Outlook" et non "Outlook"

    avez-vous une solution?

  7. #7
    Rédacteur

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2002
    Messages
    608
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mars 2002
    Messages : 608
    Points : 1 561
    Points
    1 561
    Par défaut
    Tu dois effectivement mettre EnumWindowsProc dans un module standard mais c'est seulement dans ce cas précis, parce que AddressOf ne sait pas renvoyer l'adresse d'une fonction qui est dans un module de classe.

  8. #8
    Expert éminent
    Avatar de ThierryAIM
    Homme Profil pro
    Inscrit en
    Septembre 2002
    Messages
    3 673
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2002
    Messages : 3 673
    Points : 8 524
    Points
    8 524
    Par défaut
    dans la fonction EnumWindowsProc, essaye ca si ca te convient :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     If InStr(1, sSave, "Outlook") Then MsgBox "OutLook Trouvé : " & sSave
    Vous vous posez une question, la réponse est peut-être ici :
    Toutes les FAQs VB
    Les Cours et Tutoriels VB6/VBScript
    Les Sources VB6


    Je ne réponds pas aux questions techniques par MP. Utilisez les forums. Merci de votre compréhension

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Juillet 2002
    Messages
    9
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 9
    Points : 7
    Points
    7
    Par défaut
    Cela fonctionne, mais peut-on avoir confiance dans le texte retourné par cette fonction (GetWindowText)?

    De plus existe t-il une solution pour fermer une application qui demande une confirmation d'arrêt (exemple hyperterminal demande si je veux me déconnecter)?

  10. #10
    Membre régulier
    Inscrit en
    Mai 2002
    Messages
    117
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 117
    Points : 97
    Points
    97
    Par défaut
    Pour ta première question, c'est oui, car el mot "Outlook" se trouve toujours dans la barre de titre (à moins de magouiller la base de registre).
    Pour la seconde, c'est oui aussi, il y a toujours moyen de fermer une application par des methodes plus ou moins brutales .... desole je n'ai rien à te donner dans l'immediat.

  11. #11
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Mai 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2003
    Messages : 25
    Points : 28
    Points
    28
    Par défaut
    Salut,

    Tu peux forcer l'arrêt d'un process avec la fonction TerminateProcess de kernel32:

    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
    Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
    Private Declare Function TerminateProcess Lib "kernel32" (ByVal hProcess As Long, ByVal uExitCode As Long) As Long
    Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessID As Long) As Long
     
    Public Function ProcessKill(ByVal ProcessID As Long) As Boolean
       Dim hProc As Long
       Const fdwAccess As Long = SYNCHRONIZE Or PROCESS_TERMINATE
     
       ' Need to open process with terminate rights
       hProc = OpenProcess(fdwAccess, 0&, ProcessID)
       If hProc Then
          ' Kill it.
          If TerminateProcess(hProc, 0&) Then
             ProcessKill = True
          Else
             Debug.Assert Err.LastDllError & " - TerminateProcess"
          End If
          ' Clean up.
          Call CloseHandle(hProc)
       End If
    End Function
    Nicolas Diétrich

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

Discussions similaires

  1. Listage des Webcams pas tres efficace..
    Par Flow_75 dans le forum Visual C++
    Réponses: 5
    Dernier message: 06/07/2007, 22h58
  2. [VB6] récuperation des propriétés d'un fichier exe
    Par ulrick dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 26/03/2004, 00h08
  3. [VB6] Modification des axes d'un composant Chart
    Par HPJ dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 21/05/2003, 08h33
  4. [VB6] Gestionnaire des tache de windows 2000 avec VB6
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 12/11/2002, 08h21
  5. [VB6] Interception des évènement Copier/Couper/Coller
    Par youtch dans le forum VB 6 et antérieur
    Réponses: 5
    Dernier message: 18/10/2002, 17h09

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