romainvv
Messages postés46Date d'inscriptionlundi 19 mars 2007StatutMembreDernière intervention22 mai 2009
-
11 janv. 2008 à 19:58
romainvv
Messages postés46Date d'inscriptionlundi 19 mars 2007StatutMembreDernière intervention22 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"
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 11 janv. 2008 à 20:40
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
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