GetWindowTextA [Résolu]

Messages postés
46
Date d'inscription
lundi 19 mars 2007
Dernière intervention
22 mai 2009
- - Dernière réponse : romainvv
Messages postés
46
Date d'inscription
lundi 19 mars 2007
Dernière intervention
22 mai 2009
- 11 janv. 2008 à 23:53
Bonjour,
Je finalise mon projet et je rencontre une difficulté. Mon application doit etre sensible au fenetre qui ont le focus.
J'aimerais donc que le progamme prenne note des changements de focus. Pour cela j'ai trouvé un bout de code sur lequel m'inspirer mais c'est du VB 6 et pas moyen de le faire fonctioner sur VB 2005.

Public Declare Function GetForegroundWindow Lib "user32.dll" () As Long
Public Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hWnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" (ByVal hWnd As Long) As Long

Function GetCaption(hWnd As Long)
Dim hWndlength As Long, hWndTitle As String, a As Long
hWndlength = GetWindowTextLength(hWnd)
hWndTitle = String$(hWndlength, 0)
a = GetWindowText(hWnd, hWndTitle, (hWndlength + 1))
GetCaption = hWndTitle
End Function

ensuite je vérifie

If Not Wind = GetCaption(GetForegroundWindow) Then
Wind = GetCaption(GetForegroundWindow)
GetKey = vbCrLf &  " - " & Time & " --< " & Wind & " >--
"
End If

J'ai une erreur avec la ligne hWndTitle = String$(hWndlength, 0) le "string$" pose probleme.
Voici la définition que VB6 me donne pour string$ "Renvoie une chaîne formée du nombre spécifié de répétitions du même caractère"

Auriez vous une solution ?
Merci
Afficher la suite 

Votre réponse

5 réponses

Meilleure réponse
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Dernière intervention
9 avril 2017
3
Merci
Salut,

Les long sont à remplacer par des integers et les handles pas des IntPtr







__________
  Kenji

Merci Charles Racaud 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de Charles Racaud
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
3
Merci
salut
(Kenji corrige moi si besoin..)

çà devrait donner quelquechose comme çà :

Public Class Form1
    Private Declare Function GetForegroundWindow Lib "user32.dll" () As Integer
    Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hWnd As Integer, ByVal lpString As String, ByVal cch As Integer) As Integer
    Private Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" (ByVal hWnd As Integer) As Integer

    Function GetCaption(ByVal hWnd As IntPtr) As String
        Dim lRet As Integer
        Dim sBuffer As String = String.Empty

        lRet = GetWindowTextLength(hWnd) 'nombre de caractères
        sBuffer = sBuffer.PadRight(lRet + 1, " ")  'buffer
        GetWindowText(hWnd, sBuffer, lRet + 1) 'récupère la variable
        Return sBuffer.Substring(0, lRet) 'retourne la bonne chaîne
    End Function

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Me.WindowState = FormWindowState.Minimized
        Application.DoEvents()
        Debug.Print(GetCaption(GetForegroundWindow))
    End Sub
End Class

++
Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp

Merci PCPT 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources a aidé 101 internautes ce mois-ci

Commenter la réponse de PCPT
Messages postés
3181
Date d'inscription
dimanche 15 février 2004
Dernière intervention
9 avril 2017
0
Merci
Il manque juste les IntPtr dans les déclarations, autrement, c'est parfait

Private Declare Function GetForegroundWindow Lib "user32.dll" () As IntPtr
Private Declare Function GetWindowText Lib "user32.dll" Alias "GetWindowTextA" (ByVal hWnd As IntPtr, ByVal lpString As String, ByVal cch As Integer) As Integer
Private Declare Function GetWindowTextLength Lib "user32.dll" Alias "GetWindowTextLengthA" (ByVal hWnd As IntPtr) As Integer
__________
  Kenji
Commenter la réponse de Charles Racaud
Messages postés
13368
Date d'inscription
lundi 13 décembre 2004
Dernière intervention
3 février 2018
0
Merci
merci, je retiendrai
(pourtant tu l'avais bien dit : TOUS les handle en intptr!!)
y'a rien à faire, j'arrive pas à m'y mettre à ce dotnet
Commenter la réponse de PCPT
Messages postés
46
Date d'inscription
lundi 19 mars 2007
Dernière intervention
22 mai 2009
0
Merci
Mon dieu ca fonctionne merci beaucoup
Commenter la réponse de romainvv

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.