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 :

Problème récupération information fenêtre windows


Sujet :

VB 6 et antérieur

  1. #1
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Points : 18
    Points
    18
    Par défaut Problème récupération information fenêtre windows
    Bonjour,

    j'ai une application sous vb, et dans une des fonctionnalité,
    j'ai une fenêtre windows (dont j'ai le nom) qui est ouverte,
    et je souhaite récupérer des informations sur cette fenetre windows pour la juxtaposer à mes forms ou éventuellement modifier sa taille
    pensez-vous qu'il est possible de récupérer width, left, top, ... d'une fenetre windows à travers des commandes vb.

    merci pour votre aide.

  2. #2
    Membre expert
    Avatar de Delbeke
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    2 675
    Détails du profil
    Informations personnelles :
    Âge : 70
    Localisation : France

    Informations forums :
    Inscription : Juillet 2006
    Messages : 2 675
    Points : 3 696
    Points
    3 696
    Par défaut
    Heu, tu as donné la réponse dans ta question si j'ai bien tout compris.
    Il suffit de récupérer les propriétés de la form que tu as cité dans ton programme, je ne comprends pas ou est le problème !

  3. #3
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Points : 18
    Points
    18
    Par défaut
    celle que je souhaite redimensionner n'est pas une forms vb,
    mais bien une fenêtre windows.
    par exemple: l'explorateur windows.

    je souhaite donc récupérer les informations non pas des fenêtres vb, mais les autres via des commandes systèmes ou autres, mais avec du code vb.

    merci pour votre aide.

  4. #4
    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 vas falloir faire appel aux APIs Win32 :

    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
    Option Explicit
     
    Private Type RECT
            Left As Long
            Top As Long
            Right As Long
            Bottom As Long
    End Type
     
    Private Declare Function GetWindowRect Lib "user32" (ByVal hwnd As Long, lpRect As RECT) As Long
     
    Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, _
            ByVal lpWindowName As String) As Long
     
    Private Const HWND_BOTTOM = 1
    Private Const SWP_NOSIZE = &H1
    Private Declare Function SetWindowPos Lib "user32" (ByVal hwnd As Long, ByVal hWndInsertAfter As Long, ByVal x As Long, ByVal y As Long, ByVal cx As Long, ByVal cy As Long, ByVal wFlags As Long) As Long
     
    Private Sub Command1_Click()
    Dim hIE As Long
    Dim lSetPos As Long
    Dim lGetRect As Long
    Dim rectIE As RECT
     
    hIE = FindWindow("IEFrame", vbNullString)
     
    If hIE <> 0 Then
     
        lGetRect = GetWindowRect(hIE, rectIE)
        Debug.Print "Dimension Initiale Top" & rectIE.Top & " / Botton : " & rectIE.Bottom & " / Left : " & rectIE.Left & " / Right : " & rectIE.Right
        Stop
        lSetPos = SetWindowPos(hIE, HWND_BOTTOM, rectIE.Left, rectIE.Top, rectIE.Right - rectIE.Left, rectIE.Bottom - rectIE.Top, 0)
        'A voir lGetRect et lSetPos doivent être 1 pour OK ..
    Else
      MsgBox "Fenêtre IE introuvable"
     
    End If
     
    End Sub
    te permet de retrouver l'handle de ta fenêtre IE ( j'ai utiliser son class Name IEFrame, mais on aurai pu aussi par exemple utiliser le tire de la fenêtre)

    Renvoi une variable de type "RECT" te donnant les coordonnées de chacun des côtés de ta fenêtre ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
                       Top
                  ------------
                 |               |
         left    | Fenêtre    |  Right
                 |                |
                  ------------
                      Bottom
    ensuite permet de redimensionner ou déplacer cette fenêtre ...
    les paramètres de position et tailles sont :

    X et Y position X,Y du coin haut gauche de la fenêtre, équivaut aux propriétés Left et Top renvoyé par GetWindowRect

    cX et cY : dimension de la fenêtre et dont par rapport aux valeurs retournées par GetWindowRect on as cX = Right-Left et cY= Bottom - Top

    tu remarqueras que la fenêtre n'est pas modifiée (taille/position) lors de l'exécution du code , as toi de modifier les paramétres X,Y , cX, cY selon tes besoins...

  5. #5
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Points : 18
    Points
    18
    Par défaut
    super,
    c'est exactement ça,
    ça fonctionne bien,
    merci.

    une autre question en passant,
    je connais pas du tout les fonction des API WIN32,
    j'aimerais savoir s'il était possible d'empêcher tout déplacement de la fenêtre,
    en cliquant sur la barre du haut,
    ou dans le cas contraire, est-il possible de récupérer la position de la fenêtre si elle a bougé.

    merci pour votre aide.

  6. #6
    Expert éminent sénior
    Avatar de ProgElecT
    Homme Profil pro
    Retraité
    Inscrit en
    Décembre 2004
    Messages
    6 092
    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 092
    Points : 16 606
    Points
    16 606
    Par défaut
    Citation Envoyé par benstile Voir le message
    super,
    c'est exactement ça,
    ça fonctionne bien,
    merci.

    une autre question en passant,
    je connais pas du tout les fonction des API WIN32,
    j'aimerais savoir s'il était possible d'empêcher tout déplacement de la fenêtre,
    en cliquant sur la barre du haut,
    ou dans le cas contraire, est-il possible de récupérer la position de la fenêtre si elle a bougé.

    merci pour votre aide.
    Il te faut relire attentivement le dernier message de bbil , la reponse y est donnée, il te suffit de lire de tremps en temps la position de cette fenêtre GetWindowRect avec un Timer et si la position à changée entre deux veriffications, utilises SetWindowPos .

  7. #7
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Points : 18
    Points
    18
    Par défaut
    bonjour,
    merci encore une fois, cela fonctionne,
    j'ai réussi à bloquer tout déplacement de la fenêtre.

    encore une autre question s'il vous plait,
    j'aimerais intercepter le click de certain bouton de cette fenetre à l'aide de ces API WIN 32
    en fait quand l'utilisateur clique sur fermer dans la fenetre windows,
    il y a une fenetre de confirmation d'enregistrement,
    ce que j'aimerais intercepter est le "oui" ou le "non"
    pour lancer des macros différentes,

    quelqu'un a une piste?

    merci pour votre aide.

  8. #8
    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
    Juste une question, cela devient compliqué... c'est quoi le but de ton programme ? afficher le contenu d'une page web ?

  9. #9
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Points : 18
    Points
    18
    Par défaut
    c'est une appli vb qui intéragit avec une appli windows
    et pour cela, c'est l'appli vb qui doit avoir la main dessus,
    et donc, c'est l'appli vb qui doit dire à l'autre appli de se fermer,
    ça j'ai réussi, mais je n'ai pas réussi à intercepter les messages liés à la confirmation de celle-ci.

    Merci par avance.

  10. #10
    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
    j'ai pas la réponse pour cette interception... c'est pour cela que j'aurais aimé savoir de quelle "Appli Window" il s'agit...

  11. #11
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Points : 18
    Points
    18
    Par défaut
    c'est une appli développée par la boite où je suis,
    étant stagiaire, on me donne pas accès au code de celle-ci.
    je sais même pas quelle est sa technologie.

  12. #12
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2008
    Messages
    73
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Novembre 2008
    Messages : 73
    Points : 64
    Points
    64
    Par défaut
    salut
    tu peut tester manuellement les message que l'a fenêtre que tu contrôle affiche et tu prend leur titre et dans un timer avec intervalle 15 tu vérifier si le handle de l'une de ses fenêtres est supérieur à 0, si c'est le cas alors une fenêtre est afficher et tu fait ton traitement mais personnellement je trouve que c'est pas professionnel du tout. sa sera mieux si tu nous explique mieux ce que tu veut faire et pourquoi comme sa on trouvera plusieurs moyen de t'aider.

  13. #13
    Membre à l'essai
    Inscrit en
    Décembre 2009
    Messages
    32
    Détails du profil
    Informations forums :
    Inscription : Décembre 2009
    Messages : 32
    Points : 18
    Points
    18
    Par défaut
    la technique de timer, fonctionne
    je lance une fonction toute les 5secondes,
    pour voir quelle fenêtre est ouverte,
    et ça fonctionne.

    merci beaucoup.

Discussions similaires

  1. Réponses: 2
    Dernier message: 11/12/2008, 03h34
  2. Réponses: 4
    Dernier message: 03/04/2008, 13h06
  3. Problème initialisation fenêtre Windows
    Par trecks dans le forum Windows
    Réponses: 1
    Dernier message: 14/05/2007, 14h11
  4. Réponses: 16
    Dernier message: 18/03/2007, 13h30
  5. Réponses: 3
    Dernier message: 16/11/2006, 10h34

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