marty14
Messages postés104Date d'inscriptionlundi 21 août 2006StatutMembreDernière intervention29 mai 2011
-
31 août 2008 à 07:44
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 2014
-
31 août 2008 à 11:33
Bonjour,
Je cale sur un retour d'erreur , si j'envois au programe AA qui n'est pas ouvert:
Call PostMessage(AA, WM_KEYDOWN, vbKeyDown, 0&) 'DOWN
Call PostMessage(AA WM_KEYUP, vbKeyDown, 0&)
Comment faire pour savoir a l'aide d'un msgbox que l'envoie du postmessage est egal a une erreur ?
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 31 août 2008 à 08:55
Bonjour,
Utilise pour celà la fonction autrement,
Genre
toto = PostMessage etc....
Regarde ensuite la valeir de toto : ===>> succès si <> 0, échec si 0
Tu peux de surcroût affiner en utilisant la fonction GetLastErrorde la librairie Kernel32. Elle te permettra de connaître le code de l'erreur éventuelle...
marty14
Messages postés104Date d'inscriptionlundi 21 août 2006StatutMembreDernière intervention29 mai 2011 31 août 2008 à 09:19
Merci pour ta reponse si rapide, donc j'ai fait ca avec le programme a qui je veus envoyer les instruction allumé :
Dim aa, toto As Long
Let aa = FindWindow("programme", vbNullString)
toto = SendMessageByNum(aa, WM_KEYDOWN, vbKeyDown, 0&) And SendMessageByNum(aa, WM_KEYUP, vbKeyDown, 0&)
If toto = 0 Then
MsgBox ("ERREUR")
End If
Je ne comprend pas car avec If toto = 0 Then ca m'affiche LE MSGBOX alors que la commande est bien envoyée si je fait toto<>0 la commande est toujours bien envoyée est pas le msgbox ce qui dans ce cas est bien normal.
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 31 août 2008 à 09:28
Si ta msgbox est affichée, c'est que toto = 0 et donc que tu es en situation d'échec !
La raison de cet échec est peut-être () à trouver dans ton utilisation de la fonction FindWindows (et surtout de ton "programme" comme nom de classe !)
Alors ?
Kif Kif : ... et voilà ce qui est dit en ce qui concerne la fonction FindWindows :
If the function fails, the return value is NULL. To get extended error information, call GetLastError.
A toi donc de voir ce qu'est la valeur aa qu'elle te retourne et que tu passes à la fonction PostMessage !!!
marty14
Messages postés104Date d'inscriptionlundi 21 août 2006StatutMembreDernière intervention29 mai 2011 31 août 2008 à 09:40
Houps oui desolé sendmessagebynum , les résultats sont identiques pour moi donc j'ai fait ca avec programme démarré puis commande bien executé mais toujours le MSGBOX: LastError =0
Let aa = FindWindow("WINAMP", vbNullString)
toto = SendMessageByNum(aa, WM_KEYDOWN, vbKeyDown, 0&) And SendMessageByNum(aa, WM_KEYUP, vbKeyDown, 0&)
If toto = 0 Then
LastError = GetLastError()
MsgBox ("ERREUR= " & CStr(LastError))
End If
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 31 août 2008 à 09:42
Let aa = FindWindow(vbNullString,"WINAMP")
tu pourrais commencer par tester le retour de AA !
<hr size="2" width="100%" />Prenez un instant pour répondre à [infomsg_SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 31 août 2008 à 10:58
marche pas quoi ?
avec quoi ? (code pour tester retour de FindWindow, c'est à dire aa ?).
Dit pour FindWindow :
"If the function fails, the return value is NULL."
et pas 0 (qui, au passage, est un handle bien particulier ...)
marty14
Messages postés104Date d'inscriptionlundi 21 août 2006StatutMembreDernière intervention29 mai 2011 31 août 2008 à 11:05
si je fait ca = pas d'erreur
Let aa = FindWindow("handle progr", "WINAMP EXAMPLE")
If aa = Null Then
LastError = GetLastError()
MsgBox ("ERREUR= " & CStr(LastError))
End If
si je fait ca = erreur:
Let aa = FindWindow("handle progr", "WINAMP EXAMPLE")
toto = SendMessageByNum&(aa, WM_KEYDOWN, vbKeyDown, 0) And SendMessageByNum&(aa, WM_KEYUP, vbKeyDown, 0)
If toto = Null Then
LastError = GetLastError()
MsgBox ("ERREUR= " & CStr(LastError))
End If
jmfmarques
Messages postés7666Date d'inscriptionsamedi 5 novembre 2005StatutMembreDernière intervention22 août 201427 31 août 2008 à 11:31
rhooooo...
Bon, je vais faire une tentative pour te faire comprendre des choses.
Ici, on ne va même pas tester l'échec ...
1) assure-toi que notepad n'est pas ouvert.
cette petite demo va :
- ouvrir notepad (attention, le caption est en français ! modifie si tu as une autre version)
- chercher la fenêtre ouverte correspondante et en donner le handle (aa)
- t'indiquer la nom de classe de la dite fenêtre (NotePad) ... Il est clair que si la fenêtre n'exoste pas, pas de nom de classe non plus.
(tu devrais d'ailleurs t'amuser à modifier la chaine en "Sans titre - Bloc-naotes"...===>> tu verras ...)
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetClassName Lib "user32" Alias "GetClassNameA" (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
Private Sub Command1_Click()
Shell ("notepad.exe")
Dim WinWnd As Long, Ret As String, RetVal As Long, lpClassName As String
mafenetre = "Sans titre - Bloc-notes" ' il est important que ce texte soit très exactement celui du caption de la fenêtre
aa = FindWindow(vbNullString, mafenetre)
lpClassName = Space(256)
RetVal = GetClassName(aa, lpClassName, 256)
MsgBox "Classname: " + Left$(lpClassName, RetVal)
If Left$(lpClassName, RetVal) <> "" Then
MsgBox "n'oublie pas de fermer notepad, maintenant"
End If
End Sub
Et n'oublie pas de quitter NotePad entre chaque essai, hein ...
Bonne chance, mais je crois réellement qu'avant de te lancer dans le complexe et les fonctions de l'Api, tu devrais consacrer un peu de temps aux fondements...