Les APIs

Résolu
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 - 1 sept. 2010 à 21:08
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 - 3 sept. 2010 à 19:01
Bonsoir à tous!!
Alors je me suis lancé depuis peu dans l'utilisation des API windows...mais un grand problème se pose à moi,celui des paramètres des fonctions ou subs.
Je me suis procuré d'un logiciel(APIViewer) qui reprend certains API et leurs définitions mais je ne sais trop comment les utiliser car je ne sais pas quelles valeurs sont passées en paramètre(elles sont parfois en hexadécimal ou en entier)
je prends donc un exemple d'un API souvent utilisé "SendMessage" qui a pour déclaration:
Declare Function SendMessage Lib "user32.dll" Alias "SendMessageA" ( _ 
 ByVal hwnd As Long, _ 
 ByVal wMsg As Long, _ 
 ByVal wParam As Long, _ 
 ByRef lParam As Any) As Long 


Quelles peuvent être les valeurs passées en paramètre pour cette fonction?
Je suis ouvert à tout éclaircissement de votre part.
Merci d'avance!!

Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...
Visual Basic .Net is the best and vb6.0

8 réponses

Chouchensb Messages postés 64 Date d'inscription jeudi 3 mars 2005 Statut Membre Dernière intervention 2 septembre 2010
2 sept. 2010 à 08:26
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
3 sept. 2010 à 08:59
faut changer la declaration d'API, pour mettre des INt au lieu des Long

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
3
Renfield Messages postés 17287 Date d'inscription mercredi 2 janvier 2002 Statut Modérateur Dernière intervention 27 septembre 2021 74
1 sept. 2010 à 22:25
un tres grand nombre d'APIs est documente sur msdn:

sur cette page, on y presente la liste des messages, selon le type de fenetre a qui tu souhaites envoyer le message.

enfin, hexadecimal ou decimalm tout n'est que representation de la meme valeur, au final... aucune importance, donc

Renfield - Admin CodeS-SourceS - MVP Visual Basic & Spécialiste des RegExp
0
Profil bloqué
1 sept. 2010 à 22:52
Salut NSUADI

Avant de se demander quels sont les valeurs des paramètres d'une fonction API ( Application Programm Interface) de Windows il faut déjà savoir à quoi sert cette fonction et quels sont les paramètres ( et non leurs valeurs) à y passer. Ensuite il faut savoir comment l'utiliser. Certaines API sont des Subs et d'autres sont des Fonctions (les fonctions renvoient un paramètre de retour)
Prenons l'Api SendMessage : elle sert à envoyer un message à une fenêtre Windows. UN message Windows peut être le clic d'une souris sur un contrôle, la frappe d'une touche clavier, la fermeture d'une fenêtre, etc .....
1) Le premier paramètre te dit à qui envoyer ce message ( "hwnd" est un handle de fenêtre Windows : chaque fenêtre de Windows possède un numéro unique qui est son handle. Cela suppose déjà d'utiliser une fonction API pour connaitre ce fameux handle)
2) wMsg est le message à envoyer et c'est une valeur numérique de type Long. On utilise ici plutôt des constantes prédéfinies plus significatives
3) Les 2 autres paramètres sont des paramètres permettant de définir plus précisément le message destiner à la fenêtre

Pour quelque chose de plus clair et de plus poussé sur SendMessage :http://www.vbfrance.com/forum/sujet-COMMENT-MARCHE-SENDMESSAGE_1464274.aspx

Comme tu le vois concernant les API ce ne sont pas tellement les valeurs des paramètres qui sont le plus important mais à quoi sert l'API XXXXXXXXXXXXX et quels sont ses paramètres associées ( remplace XXXXXXXXXXXX par le nom de l'API)
Souvent une API se sert de constantes définies ainsi que de structures elles aussi définies
Exemples :
- L'API ReadFile se sert des constantes GENERIC_READ, OPEN_EXISTING,FILE_FLAG_OVERLAPPED par exemple
- L'API MoveFile se sert d'une structure MOVE_FILE_DATA qui est bien définie

Le mieux pour une API c'est Google et tapez le nom de l'API ( voit aussi le site MSDN)

La théorie, c'est quand on sait tout et que rien ne fonctionne. La pratique, c'est quand tout fonctionne et que personne ne sait pourquoi.

GRENIER Alain
0

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

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
2 sept. 2010 à 00:19
Salut
Et SendMessage est la plus complexe des APIs puisqu'elle accepte beaucoup de paramètres différents, selon l'objet auquel on s'adresse.
Voir aussi http://logiciel.codes-sources.com/logiciels/API-Guide-197.aspx qui fournit des exemples en VB6

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
2 sept. 2010 à 00:56
Merci beaucoup pour vos éclaircissements,je vais donc faire un tour sur MSDN
@Jack:à propos de Api-guide,je l'ai en effet télécharger mais lors de l'installation il renvoi un message d'erreur disant qu'il y a un dll manquant:MSVBVM50 pour être précis.
Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...
Visual Basic .Net is the best and vb6.0
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
2 sept. 2010 à 18:59
j'ai eu cet exemple tiré de Api-guide valable pour vb6:
'This project needs a ListBox, named List1 and a TextBox, named Text1
Private Declare Function SendMessage Lib "user32" Alias "SendMessageA" (ByVal hwnd As Long, ByVal wMsg As Long, ByVal wParam As Integer, ByVal lParam As Any) As Long
Const LB_FINDSTRING = &H18F
Private Sub Form_Load()
    'KPD-Team 1998
    'URL: http://www.allapi.net/
    'E-Mail: KPDTeam@Allapi.net
    'Add some items to the listbox
    With List1
        .AddItem "Computer"
        .AddItem "Screen"
        .AddItem "Modem"
        .AddItem "Printer"
        .AddItem "Scanner"
        .AddItem "Sound Blaster"
        .AddItem "Keyboard"
        .AddItem "CD-Rom"
        .AddItem "Mouse"
    End With
End Sub
Private Sub Text1_Change()
    'Retrieve the item's listindex
    List1.ListIndex = SendMessage(List1.hwnd, LB_FINDSTRING, -1, ByVal CStr(Text1.Text))
End Sub


j'essaie depuis quelques temps de l'appliquer sur Vb.net mais je bloque dans le Change de ma textbox,j'ai essayé ceci:
        List1.SelectedIndex =SendMessage(List1.Handle, LB_FINDSTRING, -1, Text1.Text)

mais il me donne un message d'erreur:"Dépassement de capacité",rien de plus normal...alors j'essaie de faire un cast avec Cint mais rien y fait toujours le même message
Que dois je faire???
Merci d'avance!!

Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...
Visual Basic .Net is the best and vb6.0
0
NSUADI Messages postés 540 Date d'inscription mardi 4 août 2009 Statut Membre Dernière intervention 1 février 2013 2
3 sept. 2010 à 19:01
En effet,ça marche à présent!!!

Ce qui compte,ce n'est pas ce qu'on a mais plutôt ce que l'on fait avec ce qu'on a...
Visual Basic .Net is the best and vb6.0
0
Rejoignez-nous