Les APIs [Résolu]

Messages postés
540
Date d'inscription
mardi 4 août 2009
Dernière intervention
1 février 2013
- 1 sept. 2010 à 21:08 - Dernière réponse :
Messages postés
540
Date d'inscription
mardi 4 août 2009
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
Afficher la suite 

Votre réponse

8 réponses

Meilleure réponse
Messages postés
64
Date d'inscription
jeudi 3 mars 2005
Dernière intervention
2 septembre 2010
2 sept. 2010 à 08:26
3
Merci

Merci Chouchensb 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

Commenter la réponse de Chouchensb
Meilleure réponse
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
3 sept. 2010 à 08:59
3
Merci
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

Merci Renfield 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 91 internautes ce mois-ci

Commenter la réponse de Renfield
Messages postés
17308
Date d'inscription
mercredi 2 janvier 2002
Dernière intervention
22 août 2018
1 sept. 2010 à 22:25
0
Merci
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
Commenter la réponse de Renfield
Messages postés
1270
Date d'inscription
mardi 11 novembre 2003
Dernière intervention
24 juillet 2013
1 sept. 2010 à 22:52
0
Merci
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
Commenter la réponse de cs_Galain
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Dernière intervention
28 août 2015
2 sept. 2010 à 00:19
0
Merci
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)
Commenter la réponse de cs_Jack
Messages postés
540
Date d'inscription
mardi 4 août 2009
Dernière intervention
1 février 2013
2 sept. 2010 à 00:56
0
Merci
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
Commenter la réponse de NSUADI
Messages postés
540
Date d'inscription
mardi 4 août 2009
Dernière intervention
1 février 2013
2 sept. 2010 à 18:59
0
Merci
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
Commenter la réponse de NSUADI
Messages postés
540
Date d'inscription
mardi 4 août 2009
Dernière intervention
1 février 2013
3 sept. 2010 à 19:01
0
Merci
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
Commenter la réponse de NSUADI

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.