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 et l'api getwindowtext


Sujet :

VB 6 et antérieur

  1. #1
    t26
    t26 est déconnecté
    Membre à l'essai
    Inscrit en
    Août 2005
    Messages
    24
    Détails du profil
    Informations forums :
    Inscription : Août 2005
    Messages : 24
    Points : 23
    Points
    23
    Par défaut vb6 et l'api getwindowtext
    bonjour,
    J'aimerais récupérer le texte associé à la fenêtre située au premier plan (son "caption"). Pour cela, j'utilise les apis getforeground windox et getwindow text de la manière suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    Declare Function GetForegroundWindow Lib "user32" () As Long
     
    Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" ( _
                     ByVal hwnd As Long, _
                     ByVal lpString As String, _
                     ByVal cch As Long) As Long
    Private Sub Command1_Click()
    Dim str As String
    str = Space$(257)
    titre = Module1.GetWindowText(Me.hwnd, str, 256)
    MsgBox (titre)
    End Sub
    Le problème est qu'à la place du titre de la fenêtre, j'obtiens la longueur de ce titre! (c'est à dire le même résultat qu'avec la fonction getwindowtextlenght !)
    Qu'y a-t-il à modifier???

    merci

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Private Sub Command1_Click()
    Dim str As String
        str = String$(100, Chr$(0))
        GetWindowText Me.hwnd, str, 100
        titre = Left$(str, InStr(str, Chr$(0)) - 1)
        MsgBox (titre)
    End Sub
    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

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    290
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Septembre 2005
    Messages : 290
    Points : 374
    Points
    374
    Par défaut
    Bonjour,
    Tu peux utiliser ce code.
    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 Declare Function GetForegroundWindow Lib "user32" () As Long
    Private Declare Function GetWindowTextLength Lib "user32" Alias "GetWindowTextLengthA" (ByVal hwnd As Long) As Long
    Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
     
     
     
    Private Sub Command1_Click()
    ' Fenetre active lors de l'iteration precedente
    Static LastActive As Long
     
    ' Fenetre active sur le systeme
    ' Utiliser GetActiveWindow pour connaitre la fenetre active dans l'application)
    Dim Active As Long
    Active = GetForegroundWindow
     
    ' Si c'est la même fenêtre qui est active, on quitte
    If LastActive = Active Then Exit Sub
     
    ' On récupère la longueur du titre
    Dim Length As Long: Length = GetWindowTextLength(Active) + 1
     
    ' Afin de pouvoir reserver une chaine de caractères assez grande
    Dim Buffer As String: Buffer = Space$(Length)
     
    ' On récupère le titre
    Length = GetWindowText(Active, Buffer, Length)
     
    ' On supprime le caractère \0 final
    Buffer = Left$(Buffer, Length)
     
    ' On ajoute le titre dans la liste
    'List1.AddItem Buffer
    MsgBox Buffer
     
    ' Et on mémorise la fenetre qui etait active
    LastActive = Active
    End Sub
    jpleroisse

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

Discussions similaires

  1. [VB6]Liaison MODBUS,API, et debutant
    Par simgoku dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 17/04/2008, 08h10
  2. [VB6] usercontrol + module + API
    Par sBoOb14 dans le forum VB 6 et antérieur
    Réponses: 10
    Dernier message: 20/07/2007, 10h55
  3. [VB6] Fonction ou API qui retourne l'utilisateur windows courant
    Par nnj dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 14/05/2006, 18h31
  4. [VB6] DrawWidth et API
    Par pallina dans le forum VB 6 et antérieur
    Réponses: 4
    Dernier message: 02/12/2002, 17h09
  5. [VB6] Comment accéder a la visionneuse d'API ??
    Par Argonz dans le forum VB 6 et antérieur
    Réponses: 3
    Dernier message: 13/11/2002, 12h57

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