Question erreur

marty14 Messages postés 104 Date d'inscription lundi 21 août 2006 Statut Membre Dernière intervention 29 mai 2011 - 31 août 2008 à 07:44
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 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 ?

17 réponses

jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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...
0
marty14 Messages postés 104 Date d'inscription lundi 21 août 2006 Statut Membre Dernière intervention 29 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.

QU'EST CE QUI NE VA PAS ?
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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 !!!
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
31 août 2008 à 09:28
salut,
tu devrais te mettre en relation avec GHGFSJD, vous avez les mêmes questions....

http://www.vbfrance.com/infomsg_API-SENDMESSAGEBYNUM_1186493.aspx#1
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
31 août 2008 à 09:36
et puis je me demande laquelle des 2 fonctions (PostMessage et SendMessage) tu utilises finalement ... faudrait savoir !!!
0
marty14 Messages postés 104 Date d'inscription lundi 21 août 2006 Statut Membre Dernière intervention 29 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
0
marty14 Messages postés 104 Date d'inscription lundi 21 août 2006 Statut Membre Dernière intervention 29 mai 2011
31 août 2008 à 09:42
ok avec postmessage effectivement je n'ai pas cette erreur
0
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
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  
0
marty14 Messages postés 104 Date d'inscription lundi 21 août 2006 Statut Membre Dernière intervention 29 mai 2011
31 août 2008 à 09:43
ah oui meme quand le programme n'est pas allumé
0
marty14 Messages postés 104 Date d'inscription lundi 21 août 2006 Statut Membre Dernière intervention 29 mai 2011
31 août 2008 à 09:46
If aa = 0 Then
LastError = GetLastError()
MsgBox ("ERREUR= " & CStr(LastError))
End If

aucun retour, le prog est bien là.
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
31 août 2008 à 10:00
pas 0 ! NULL ...
0
marty14 Messages postés 104 Date d'inscription lundi 21 août 2006 Statut Membre Dernière intervention 29 mai 2011
31 août 2008 à 10:55
eh ben non, marche pas non plus
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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 ...)
0
marty14 Messages postés 104 Date d'inscription lundi 21 août 2006 Statut Membre Dernière intervention 29 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
0
marty14 Messages postés 104 Date d'inscription lundi 21 août 2006 Statut Membre Dernière intervention 29 mai 2011
31 août 2008 à 11:06
Dit pour FindWindow :
"If the function fails, the return value is NULL."
je met ca ou ?
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
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...
0
jmfmarques Messages postés 7666 Date d'inscription samedi 5 novembre 2005 Statut Membre Dernière intervention 22 août 2014 27
31 août 2008 à 11:33
pardon ...
Modifie
Dim WinWnd As Long, Ret As String, RetVal As Long, lpClassName As String
en
Dim aa As Long,  RetVal As Long, lpClassName As String
0
Rejoignez-nous