Qu'est ce qu'une API ? Si l'on s'en tient à la définition de WIKIPEDIA : En informatique, une interface de programmation applicative (souvent désignée par le terme API pour application programming interface) est un ensemble normalisé de classes, de méthodes ou de fonctions qui sert de façade par laquelle un logiciel offre des services à d'autres logiciels. Elle est offerte par une bibliothèque logicielle ou un service web, le plus souvent accompagnée d'une description qui spécifie comment des programmes consommateurspeuvent se servir des fonctionnalités du programme fournisseur. Qu'est ce que l'API de Windows ? Plus précisément l'API de Windows, souvent abrégée en WIN32API ou WINAPI, représente l'ensemble des fonctions mises à disposition par microsoft pour accéder aux coeur de windows. Lorsque votre langage de développement préféré atteint ses limites, oublie de proposer quelque chose qui semble pourtant réalisable autrement sous windows, il y a de fortes chances que l'API de windows dispose d'une fonction utilisable. Mais les restrictions à l'utilisation des API sont nombreuses : - Des services rudimentaires "bas niveau" : Une fonction de l'API Windows offre un service de base, relativement atomique, par conséquent ne vous attendez pas à trouver des fonctions qui vous mâchent le travail (envoyer un PDF, ou vous connecter à une base de données). On travaille plutôt sur des couches bases, entrées, sorties, réseau, et surtout tout ce qui concerne le système de fenêtrage de windows, le dessin des contrôles, l'ordre d'apparition des fenêtres, leurs caractéristiques, et des fonctions "brutes" de manipulation graphiques, comme des copies de blocs mémoire binaires, etc ... - un typage strict : la moindre erreur de type, de taille, ou de contenu sur un élément fourni en paramètre à une fonction d'une API Windows, et c'est le plantage assuré. Le plus délicat est donc de bien se documenter sur les formats attendus, et de bien savoir aussi connaitre leur écriture équivalente en WLangage, surtout lorsqu'il s'agit d'utiliser des pointeurs, ou d'obtenir ou de fournir l'adresse mémoire d'une variable. - une relative complexité : l'utilité d'une fonction de l'API ne va pas forcément être évidente à la simple lecture de son nom. Parfois oui, mais souvent ce n'est pas le cas, encore moins son usage. D'autant qu'il vous faudra souvent apprendre vous même à faire la conversion entre ce qu'on trouve comme documentation sur internet à son propos (souvent déclaré en C ou en VB), et le WLangage qui en découle (mais heureusement windev dispose d'un outil pour ça, qu'on abordera un peu plus loin). Ses avantages sont : - un accès direct au système sans intermédiaire, et donc une plus grande rapidité d'exécution - une extension des possibilités parfois restrictives de certains langages de programmation - une interaction entre des applications de différentes natures. Ou les trouver, et comment les exploiter : Sous windev, depuis l'outil WDAPI inclus dans WDOUTILS (onglet outils de windev) voir la documentation PCSOFT à ce sujet : Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! ON remarque d'entrée que dans la colonne DLL, les différentes API de Windows sont des fonctions qui appartiennent à différents fichiers systèmes de Windows : - GDI32 (Graphics Device Interface) : gère les opérations graphiques (dessins, traitements sur les images) -WINSPOOL.DRV : Interface cliente du Spooler - ADVAPI32 : API avancées, sécurité , appels de la base de registre etc ... -COMDLG32 : boites de dialogues standard de windows (enregistrer sous, etc ...) - KERNEL32 : noyau de Windows - USER32 : idem - WINMM : gestion du multimédia, musique, midi, wav, etc ... D'une manière générale on se fiche un peu de savoir depuis quel fichier provient quelle fonction. La méthodologie est plutôt la suivante : 1) cherchez sur internet l'API qui pourrait vous intéresser en fonction de ce que vous voulez faire (même sur une page qui n'a rien à voir avec windev, ça peut vous donner des pistes) 2) Retrouvez la fonction de même nom dans WDAPI récupérez son code de déclaration tel qu'affiché dans la zone inférieure de la fenêtre de WDAPI 4) utilisez là dans votre code. IMPORTANT : Il existe 3 variétés d'informations utiles à récupérer à ce niveau, correspondant aux 3 premiers onglets de WDAPI : Les Fonctions (équivalentes à nos procédures windev) Les Structures (équivalentes à nos structures windev) Les Constantes (équivalentes à nos constantes windev) Un Exemple concret pas trop compliqué pour vous aider à démarrer : Je suis parti d'un exemple tout bête trouvé sur internet, proposé en C pour afficher un texte centré dans le contrôle de son choix (une recette, on pourrait dire) : Simple source d'inspiration De ceci on retiendra donc qu'il faut : une structure de type RECT, pour contenir les coordonnées de notre zone écran du contrôle dans lequel on veut dessiner l'appel à la fonction API GetClientRect, chargée de nous restituer les coordonnées de notre contrôle dont on fournit le handle, et de placer ces infos dans notre structure rect le Handle (poignée en français) de notre fenêtre (c'est à dire le numéro unique que windows attribue à chaque rectangle qu'il dessine, que ce soit un champ ou une fenêtre) Ce Handle nous pouvons le récupérer avec la fonction =Handle(monchamp) de windev le hDC, qui est un cousin du Handle, qui indique non plus seulement un identifiant de fenêtre, mais aussi un contexte de dessin (DC), c'est à dire une zone tangible sur laquelle on a le droit de dessiner. Les 2 sont voisins. Il existe une fonction API aussi qui s'appelle GetDC() et qui permet d'obtenir le hDC depuis le hWindows (notre handle de notre windows). une chaîne contenant le texte à afficher, et fournir son adresse via l'ajout de & devant le nom de la variable. les Constantes DT_SINGLELINE, DT_CENTER et DT_VCENTER pour indiquer à l'API DrawText de dessiner sur le hDC le texte, dans le rectangle rect, en prenant soin d'afficher ce texte sur une seule ligne horizontale (DT_SINGLELINE), de l'afficher au centre Horizontal et Vertical (DC_CENTER et DC_VCENTER). ... ouf .... !!! Et comme vous pouvez le constater, ça peut se révéler plus verbeux en windev, mais voilà comment on y parvient : N'oubliez pas de définir les structures et constantes nécessaires dans la partie initialisation d'une fenêtre ou du projet : Voici un autre exemple, d'utilisation de WINAPI plus simple trouvé dans l'aide de windev (une autre syntaxe d'ailleurs, mais qui semble équivalente via AppelDLL32 au lieu de API) : Comment faire l'équivalent de ce que serait un ChampRepeint() N'hésitez pas à utiliser l'Assistant API, lorsque qui apparait vous saisissez API( ... il vous propose directement les DLL courantes, ou même d'autres de vos propres DLL : Si nous voulions coder une fonction ChampRepeint() pour la réutiliser, sa syntaxe pourrait être : Et son Appel serait alors : Pour aller plus loin, vous trouverez des exemples d'appel API dans les projets unitaires de windev indiquez au bas de cette page d'aide : Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens! Source : Bonjour visiteur, Merci de vous Inscrire ou de vous connectez pour voir les liens!