GetWindowTextA [Résolu]

romainvv 46 Messages postés lundi 19 mars 2007Date d'inscription 22 mai 2009 Dernière intervention - 11 janv. 2008 à 19:58 - Dernière réponse : romainvv 46 Messages postés lundi 19 mars 2007Date d'inscription 22 mai 2009 Dernière intervention
- 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
Charles Racaud 3181 Messages postés dimanche 15 février 2004Date d'inscription 9 avril 2017 Dernière intervention - 11 janv. 2008 à 20:03
3
Merci
Salut,

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







__________
  Kenji

Merci Charles Racaud 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de Charles Racaud
Meilleure réponse
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 11 janv. 2008 à 20:40
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

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 93 internautes ce mois-ci

Commenter la réponse de PCPT
Charles Racaud 3181 Messages postés dimanche 15 février 2004Date d'inscription 9 avril 2017 Dernière intervention - 11 janv. 2008 à 21:10
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
PCPT 13368 Messages postés lundi 13 décembre 2004Date d'inscription 3 février 2018 Dernière intervention - 11 janv. 2008 à 22:22
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
romainvv 46 Messages postés lundi 19 mars 2007Date d'inscription 22 mai 2009 Dernière intervention - 11 janv. 2008 à 23:53
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.