POURMONET
Messages postés12Date d'inscriptionmercredi 24 mai 2006StatutMembreDernière intervention22 août 2012
-
22 nov. 2008 à 11:43
POURMONET
Messages postés12Date d'inscriptionmercredi 24 mai 2006StatutMembreDernière intervention22 août 2012
-
26 nov. 2008 à 22:15
Bonjour,
ça coince. Je dois être un peu neuneu, mais ce bout de code ne fonctionne pas.
j'ai une application qui tourne, elle s'appelle "Identification", je veux lui envoyer un message à afficher dans un textbox à partir d'un autre programme.
le code est simple :
'envoyer un message sur mon appli
nom_fenetre = "Identifiant"
Handle = cherche_fenetre(vbNullString, nom_fenetre)
Handle = GetWindow(Handle, 5) 'se placer dans la fenetre du texte
txt = "BONJOUR"
For num = 1 To Len(txt)
lettre = Asc(Mid(txt, num, 1))
PostMessage Handle, WM_KEYDOWN, lettre, 0
PostMessage Handle, WM_KEYUP, lettre, 0
Next
Et bien ça marche pas.
Les fonctions Tab ou Close passent bien, mais ce message ne s"affiche pas.
j'ai du rater quelque chose, mais je ne sais pas ou !!!
si quelqu'un a une idée, je le remercie par avance.
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 22 nov. 2008 à 16:27
salut,
pas besoin de boucler...
en plus ici tu n'envoies pas la lettre mais son code ascii, et n'ayant pas tes déclarations sous les yeux, moins facile...
et "
cherche_fenetre " n'est pas un nom d'API normal...
Private Const WM_SETTEXT As Long = &HC&
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal Msg As Long, wParam As Any, lParam As Any) As Long
SendMessage
Handle
, WM_SETTEXT, ByVal 0&, ByVal
"BONJOUR"
<hr size ="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
POURMONET
Messages postés12Date d'inscriptionmercredi 24 mai 2006StatutMembreDernière intervention22 août 2012 22 nov. 2008 à 18:12
Bonsoir,
Cherche_fenetre c'était juste pour montrer à un ami que l'on pouvait modifier le nom d'une fonction API.
ceci dit, WM-SETTEXT marche trés bien, toutefois il n'affiche pas le texte dans la bonne textbox, mais toujours dans le même bouton de la fenêtre.
comment faire pour afficher dans le bon champ de saisie ?
j'ai essayé la touche tab, le focus change bien mais le text est toujours saisie dans le même controle.
nom_fenetre = "Identifiant"
Handle = FindWindow(vbNullString, nom_fenetre)
Handle = GetWindow(Handle, 5) 'se placer dans la fenetre du texte
POURMONET
Messages postés12Date d'inscriptionmercredi 24 mai 2006StatutMembreDernière intervention22 août 2012 22 nov. 2008 à 19:30
Cela me permet de sélectionner une fenêtre du programme hôte.
Si je ne met pas GetWindows, le message apparait dans le titre de la fenêtre.
Si je le laisse, le message apparait dans le bouton OK
J'ai essayé d'autres code que le 5, mais cela ne donne rien.
je n'arrive pas à envoyer mon message dans la textbox.
Le problème est que je n'ai pas pu trouvé d'explication claire sur ces fonctions.
J'avance à TATON.
Vous n’avez pas trouvé la réponse que vous recherchez ?
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 22 nov. 2008 à 22:08
à tatons ok mais là c'est pire que du pifomètre..., tu utilises une API sans lire à quoi elle sert...
The GetWindow function retrieves the handle of a window that has the specified relationship (Z order or owner) to the specified window. 5 c'est GW_CHILD
avoir la class "enfant" c'est bien beau, mais il y a plusieurs contrôles sur ce "niveau"....
des "button", des "edit", etc.....
si tu prends le premier venu forcément tu as le premier venu!
soit tu gardes cette méthode et dans ce cas il te faut aussi jouer avec GetClassName et de nouveau
GetWindow
avec le flag GW_HWNDNEXT, soit tu joues avec FindWindowEx
le mieux étant au moins de savoir ce qu'on cherche, en l'occurence d'aller "lire" le bon handle visuellement, avec Spy++, puis de commencer les tests (sendmessage) seulement quand on a trouvé le même handle
bon courage
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
POURMONET
Messages postés12Date d'inscriptionmercredi 24 mai 2006StatutMembreDernière intervention22 août 2012 25 nov. 2008 à 22:35
il s'agit d'un code de debuggage, il fonctionne mais doit être terminé pour être utilisé proprement.
Bon courage
Private Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function PostMessage Lib "user32" Alias "PostMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, lParam As Any) As Long
Private Declare Function SetForegroundWindow Lib "user32" (ByVal hwnd As Long) As Long
Private Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" (ByVal hwnd As Long, ByVal Msg As Long, wParam As Any, lParam As Any) As Long
Private Declare Function FindWindowEx Lib "user32" Alias "FindWindowExA" (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
Private Declare Function GetDlgItem Lib "user32" (ByVal hDlg As Long, ByVal nIDDlgItem As Long) As Long
'utiliser pour ce test une fenetre avec la saisie d'un id et pw
'1 récupérer le handle de la fenetre par son titre
nom_fenetre = "Identifiant"
Handle = FindWindow(vbNullString, nom_fenetre)
'2 récupérer les noms de class de toutes les fenetres filles
Do
cwnd = FindWindowEx(Handle, cwnd, vbNullString, vbNullString)
If cwnd = 0 Then Exit Do
i = i + 1
HandleFen(i) = cwnd
Debug.Print "Child sibling handle: " & cwnd
Loop
'afficher toutes les sous fenêtres pour comprendre
For i = 1 To 4
Debug.Print "Handle " & i & " = " & HandleFen(i)
Next
'afficher les noms
Debug.Print "ID " & HandleFen(4) & " - " & Hex(HandleFen(4))
Debug.Print "PW " & HandleFen(3) & " - " & Hex(HandleFen(3))
'étudier l'ordre avec Spy++ ou par test
'dans ce cas le text box 4 est l'ID
TXT$ = TXT1
SendMessage HandleFen(4), WM_SETTEXT, ByVal 0&, ByVal TXT$
'dans ce cas le textbox 3 est le password
TXT$ = PW
SendMessage HandleFen(3), WM_SETTEXT, ByVal 0&, ByVal TXT$
'cette fonction ne marche pas encore
'PostMessage HandleFen(1), WM_KEYDOWN, VK_RETURN, 0