Réponse acceptée !
Breuhm.
Charles Racaud a pas posté pour le plaisir
Merci d'adopter un langage non SMS.
Faut pas oublier que des codeux de tout âge se balade sur le fofo...et que les plus vieux sont pas les moins bons !
Vala qui devrait te satisfaire.
Ce code regarde périodiquement si une fenêtre portant un titre précis existe.
Si elle trouve cette fenêtre, alors elle en prend la première enfant, puis la dernière de ce niveau.
On tombe alors sur le contenu de la MsgBox, du moins sur les applis de VB6, avec ou sans icône, d'après les essais que j'ai fait.
Elle affiche le contenu dans une TextBox.
Le code est mal organisé, mais fonctionnel. Faudrait gérer un timer non visuel et tout mettre dans un module ou une classe je pense.
Dans une fiche avec une TextBox Text et un Timer Timer :
=================================================================================
Option Explicit
Private Const GW_CHILD = 5
Private Const GW_HWNDLAST = 1
Private Const WM_GETTEXT = &HD
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String) As Long
Private Declare Function EnumWindows Lib "user32" (ByVal lpEnumFunc As Long, ByVal lParam As Long) As Long
Private Sub Timer_Timer()
Dim AnBuffer As String * 200
sCaption = "Titre"
EnumWindows AddressOf EnumWindowsCallBack, 0
If nHandle = 0 Then
Text.Text = ""
Else
nHandle = GetWindow(nHandle, GW_CHILD)
nHandle = GetWindow(nHandle, GW_HWNDLAST)
SendMessage nHandle, WM_GETTEXT, 200, AnBuffer
Text.Text = AnBuffer
End If
End Sub
=================================================================================
Il faut aussi un module pour pouvoir utiliser AddressOf :
=================================================================================
Option Explicit
Public sCaption As String
Public nHandle As Long
Private Declare Function GetWindowText Lib "user32" Alias "GetWindowTextA" (ByVal hwnd As Long, ByVal lpString As String, ByVal cch As Long) As Long
Public Function EnumWindowsCallBack(ByVal hwnd As Long, ByVal lParam As Long) As Boolean
Dim AnBuffer As String * 200
GetWindowText hwnd, AnBuffer, 200
If Left(AnBuffer, Len(sCaption)) = sCaption Then
EnumWindowsCallBack = False
nHandle = hwnd
Else
nHandle = 0
EnumWindowsCallBack = True
End If
End Function
=================================================================================
Pour faire le test, on peut utiliser ce genre de code :
(Attention, ne pas tester l'appli avec une de ces MsgBox à elle : cela ne fonctionnerat pas)
=================================================================================
Private Sub Command_Click()
MsgBox "Contenu", 0, "Titre"
End Sub
=================================================================================