|
API |
|
Stagiaire WDF
Inscrit: 26/08/2006 07:13
De Suisse
Post(s): 16
|
Bonjour, Je suis nouvelle sur ce site qui semble bien complet. Je debute aussi sur windev, étant plutot habituée a visual basic. Je voulais essayer un truc peut etre un peu bete pour decouvrir : l'envoi de message sur un salon de discussion dans le logiciel AOL. windev ne transcris pas vraiment le code vb et je me retrouve avec plein d'erreur. en vb6 ca donnais: Private Sub Command2_Click()
miaou.SetText "" ' On vide la zone de saisie
miaou.SetText txtSend.Text ' On met le texte
miaou.ClickIconSend ' Click sur l'icone d'envoit
End Sub
Private Sub Form_Load()
miaou.AOL_GetHandles ' Récupération des handles AOL
End Sub
et dans le module miaou: ' APIs
Public Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Public 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
Public Declare Function SendMessageLong& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As Long)
Public Declare Function SendMessageByString& Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Long, ByVal lParam As String)
' Constantes
Public Const WM_LBUTTONDOWN = &H201
Public Const WM_KEYUP = &H101
Public Const VK_SPACE = &H20
Public Const WM_SETTEXT = &HC
' Variables globales
Public AOL_RoomChild As Long 'Handle de la child du salon
Public AOL_EditBox As Long 'Handle de la zone de texte
Public AOL_IconSend As Long 'Handle de l'icone pour send le texte en salon
' AOL_GetHandles : Récupère les handles AOL
' Retourne true si le salon a été trouvé sinon retourne false
Public Function AOL_GetHandles() As Boolean
'Déclare les variables
Dim AOL As Long, Mdi As Long, Child As Long, Rich As Long, AOLList As Long, AOLIcon As Long, AOLStatic As Long, RichLS As Long, Ico1 As Long, Ico2 As Long
'Récupère des handles principaux
AOL& = FindWindow("AOL FRAME25", vbNullString)
Mdi& = FindWindowEx(AOL&, 0&, "MDIClient", vbNullString)
'Boucle pour trouver le salon
Boucle:
'Trouve la child
Child& = FindWindowEx(Mdi&, Child&, "AOL Child", vbNullString)
'Si n 'existe pas alors on est pas en salon
If Child& = 0 Then
'MsgBox "Aucune child trouvée..."
Exit Function
End If
'Récupère les objets
Rich& = FindWindowEx(Child&, 0&, "RICHCNTL", vbNullString)
AOLList& = FindWindowEx(Child&, 0&, "_AOL_Listbox", vbNullString)
AOLIcon& = FindWindowEx(Child&, 0&, "_AOL_Icon", vbNullString)
AOLStatic& = FindWindowEx(Child&, 0&, "_AOL_Static", vbNullString)
RichLS& = FindWindowEx(Child&, 0&, "richcntlreadonly", vbNullString)
'Si on a tout trouvé, alors c'est le salon
If Rich& <> 0& And AOLList& <> 0& And AOLIcon& <> 0& And AOLStatic& <> 0& Then
'Stoque les handles dans la structure
AOL_RoomChild = Child&
AOL_EditBox = Rich&
'Récupère l'icone envoyant le texte en salon
AOLIcon = 0
For a = 0 To 3
AOLIcon = FindWindowEx(Child&, AOLIcon, "_aol_icon", vbNullString)
Next a
AOL_IconSend = AOLIcon
'Tout s'est bien passé
AOL_GetHandles = True
Exit Function
End If
GoTo Boucle
End Function
' ClickIcon : Click sur une icone AOL
Public Sub ClickIconSend() 'Click sur une icone AOL
Call SendMessageLong(AOL_IconSend, WM_LBUTTONDOWN, 0&, 0&)
Call SendMessageLong(AOL_IconSend, WM_KEYUP, VK_SPACE, 0&)
End Sub
' SetText : Ajoute du texte dans un editbox
Sub SetText(Txt As String) 'Envoyer du txt
Call SendMessageByString(AOL_EditBox, WM_SETTEXT, Len(Txt), Txt)
End Sub
Merci pour vos eclaircissements
Contribution le : 26/08/2006 07:26
|
|
|
Re: API |
|
Stagiaire WDF
Inscrit: 26/08/2006 07:13
De Suisse
Post(s): 16
|
dans procedures globales j'ai mis: FindWindow est un entier // Type C :HWND
lpClassName est un entier // Type C :LPCSTR, c'est l'adresse d'une chaîne, il est aussi possible de spécifier directement une chaîne
lpWindowName est un entier // Type C :LPCSTR, c'est l'adresse d'une chaîne, il est aussi possible de spécifier directement une chaîne
FindWindow=API("USER32","FindWindowA",lpClassName,lpWindowName)
FindWindowEx est un entier // Type C :HWND
VAR_1_HWND est un entier // Type C :HWND
VAR_2_HWND est un entier // Type C :HWND
VAR_3_LPCSTR est un entier // Type C :LPCSTR, c'est l'adresse d'une chaîne, il est aussi possible de spécifier directement une chaîne
VAR_4_LPCSTR est un entier // Type C :LPCSTR, c'est l'adresse d'une chaîne, il est aussi possible de spécifier directement une chaîne
FindWindowEx=API("USER32","FindWindowExA",VAR_1_HWND,VAR_2_HWND,VAR_3_LPCSTR,VAR_4_LPCSTR)
SendMessageLong est un entier // Type C :LRESULT
hWnd est un entier // Type C :HWND
Msg est un entier sans signe // Type C :UINT
wParam est un entier // Type C :WPARAM
lParam est un entier // Type C :LPARAM
SendMessageLong=API("USER32","SendMessageA",hWnd,Msg,wParam,lParam)
SendMessageByString est un entier // Type C :LRESULT
hWnd2 est un entier // Type C :HWND
Msg2 est un entier sans signe // Type C :UINT
wParam2 est un entier // Type C :WPARAM
lParam2 est un entier // Type C :LPARAM
SendMessageByString=API("USER32","SendMessageA",hWnd2,Msg2,wParam2,lParam2)
les constantes... apparement il faut les mettres ailleurs... et WK_SPACE n'est pas listée dans WDAPI WM_LBUTTONDOWN = 513
WM_KEYUP = 257
VK_SPACE = 32
WM_SETTEXT = 12
Contribution le : 26/08/2006 08:24
|
|
|
Re: API |
|
Animateur WDF
Inscrit: 19/01/2004 13:48
De www.sigmasys.fr
Post(s): 988
|
Bonjour, Voici quelques informations qui pourrait vous être utiles. Pour les constantes, il faut les déclarer dans le code d'initialisation du projet de la façon suivante :
CONSTANT
<Nom de la constante 1> = <Valeur 1>
<Nom de la constante 2> = <Valeur 2>
FIN
N.B. : WK_SPACE n'est pas listé dans WDAPI car il fallait taper VK_SPACE. En VB, il faut déclarer les procédures auxquelles on fait appel dans le programme. En WinDev, on ne le fait pas. Il faut ôter les lignes du style "FindWindow=API("USER32","FindWindowA",lpClassName,lpWindowName)" de votre code. Il ne faut utiliser cette syntaxe qu'au moment où vous avez réellement besoin de la fonction, avec les bonnes valeurs en paramètre. P.S. : Lorsqu'il faut passer un pointeur de chaine à une fonction, il faut d'abord déclarer une chaine( par ex : toto est une chaine ASCIIZ sur 255), puis passer la chaine à la fonction de la façon suivante : API("USER32"","FindWindowA",&toto,....) Bon dév., Totof
Contribution le : 26/08/2006 08:41
|
|
|
Re: API |
|
Stagiaire WDF
Inscrit: 26/08/2006 07:13
De Suisse
Post(s): 16
|
Merci bien pour les infos PROCEDURE SetText(Txt est chaîne)
AppelDLL32("USER32","SendMessageA",AOL_EditBox, WM_SETTEXT, Taille(Txt), Txt)
PROCEDURE ClickIconSend() // Click sur une icone AOL
AppelDLL32("USER32","SendMessageA",AOL_IconSend,WM_LBUTTONDOWN, 0, 0)
AppelDLL32("USER32","SendMessageA",AOL_IconSend,WM_KEYUP, VK_SPACE, 0)
FONCTION AOL_GetHandles()
ValeurRetour est booléen
// Déclare les variables
AOL est entier; Mdi est entier; Child est entier; Rich est entier; AOLList est entier; AOLIcon est entier; AOLStatic est entier; RichLS est entier; Ico1 est entier; Ico2 est entier
// Récupère des handles principaux
AOL=API("USER32","FindWindowA","AOL FRAME25", Caract(0))
Mdi=API("USER32","FindWindowExA",AOL,0,"MDIClient", Caract(0))
// Boucle pour trouver le salon
// Trouve la child
Child=API("USER32","FindWindowExA",Mdi,Child,"MDIClient", "AOL Child", Caract(0))
// Si n 'existe pas alors on est pas en salon
SI Child = 0 ALORS
// MsgBox "Aucune child trouvée..."
RENVOYER ValeurRetour
FIN
// Récupère les objets
Rich=API("USER32","FindWindowExA",Child,0,"RICHCNTL", Caract(0))
AOLList=API("USER32","FindWindowExA",Child,0,"_AOL_Listbox", Caract(0))
AOLIcon=API("USER32","FindWindowExA",Child,0,"_AOL_Icon", Caract(0))
AOLStatic=API("USER32","FindWindowExA",Child,0,"_AOL_Static", Caract(0))
RichLS=API("USER32","FindWindowExA",Child,0,"richcntlreadonly", Caract(0))
// Si on a tout trouvé, alors c'est le salon
SI ((Rich <> 0) ET( AOLList <> 0 ET( AOLIcon <> 0 ET AOLStatic <> 0 )))ALORS
// Stoque les handles dans la structure
AOL_RoomChild = Child
AOL_EditBox = Rich
// Récupère l'icone envoyant le texte en salon
AOLIcon = 0
i est un entier
POUR i = 0 A 3
AOLIcon = API("USER32","FindWindowExA",Child,AOLIcon,"_AOL_Icon", Caract(0))
FIN
AOL_IconSend = AOLIcon
// Tout s'est bien passé
ValeurRetour = Vrai
RENVOYER ValeurRetour
FIN
RENVOYER ValeurRetour
CONSTANT
WM_LBUTTONDOWN = 513
WM_KEYUP = 257
VK_SPACE = 32
WM_SETTEXT = 12
FIN
// ===============================================================================
// Variables globales
// ===============================================================================
AOL_RoomChild est entier // Handle de la child du salon
AOL_EditBox est entier // Handle de la zone de texte
AOL_IconSend est entier
command2
SetText( "") // On vide la zone de saisie)
SetText( txtSend..Valeur) // On met le texte)
ClickIconSend // Click sur l'icone d'envoit
y a encore du boulot
Contribution le : 26/08/2006 09:30
|
|
Vous ne pouvez pas débuter de nouveaux sujets.
Vous pouvez voir les sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.
|
Connexion
Menu
Chercher WDForge
Chercher Web
Partenaires
|