IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

WinDev Discussion :

Exemples d'utilisation d'API sous WinDev


Sujet :

WinDev

  1. #21
    Membre habitué
    Avatar de jdsetls
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2012
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2012
    Messages : 209
    Points : 164
    Points
    164
    Billets dans le blog
    1
    Par défaut Remarques sur le document SDK nd'Hibernatus (1/n)
    Bonjour,
    Je commence, en bon potache de base, à lire le document SDK fourni par Hibernatus le Réveillé.
    En débutant j'observe que le header .h est à l'origine je pense de nombre de piratages puisqu'il a pour but d'inclure un nouveau code à l'intérieur du code existant.
    en prenant en charge toutes les complications liées aux problèmes de portabilité etc.
    De fait, il peut être compliqué à détricoter pour le porter dans un autre langage.
    C'est précisément pour cela que cette discussion a été lancée, pour simplifier l'usage des API (DLLs, etc.). Des exemples courts et simples seront les bienvenus.
    Le document d'Hibernatus est clair, bien écrit, stimulant. Lorsqu'il remarque qu'il a été très peu utilisé par ses collègues et sachant que sa signature incorpore '34' et aussi qu'il est rigoureux (pas tatillon) sur l'usage des préfixes dans les variables et la mise en majuscule des instructions, j'en déduis qu'il est possible, disons probable, qu'il travaille ou ait travaillé chez PCSoft.
    La partie qui nous intéresse le plus commence en page 20/26 : Equivalences Windev
    Pour conclure, autant c'est intéressant, autant je reste partiellement sur ma faim.
    J'aurais voulu des exemples simples. En Windev. Accessibles à un petit cerveau comme le mien.
    Hibernatus, reprend ta plume.
    Merci d'avance et cordialement
    Mon dernier livre Si c'est simple, c'est du Windev, version 2014, disponible sur Lulu.com, mot-clé Windev.
    http://www.lulu.com/shop/search.ep?t...ch=lulu.com&q=

  2. #22
    Membre expérimenté
    Inscrit en
    Août 2010
    Messages
    726
    Détails du profil
    Informations forums :
    Inscription : Août 2010
    Messages : 726
    Points : 1 645
    Points
    1 645
    Par défaut
    J'avais également préparé une DLL d'exemple avec son header, et un projet WinDev d'exercices à faire avec la DLL.
    Si je le retrouve...

  3. #23
    Membre du Club
    Homme Profil pro
    Admin Unix & Dev Sénior
    Inscrit en
    Mai 2003
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Brésil

    Informations professionnelles :
    Activité : Admin Unix & Dev Sénior

    Informations forums :
    Inscription : Mai 2003
    Messages : 25
    Points : 49
    Points
    49
    Par défaut
    Salut,

    Voici 2 liens, qui datent un peu, mais bien utiles :

    http://centrewd.free.fr/?page=api
    http://windevapi.free.fr/

    @+

  4. #24
    Membre habitué
    Avatar de jdsetls
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2012
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2012
    Messages : 209
    Points : 164
    Points
    164
    Billets dans le blog
    1
    Par défaut Dllset APIs trop anciennes
    Citation Envoyé par hartyshow Voir le message
    Salut,

    Voici 2 liens, qui datent un peu, mais bien utiles :

    http://centrewd.free.fr/?page=api
    http://windevapi.free.fr/

    @+
    Bonjour,

    J'ai testé et retesté les APIs mentionnées sur le site mais elles ont besoin d'être mises à jour.

    En gros elles ne fonctionnent que sur les versions de Windows 2000.


    L'idée était excellente.
    Cordialement
    Mon dernier livre Si c'est simple, c'est du Windev, version 2014, disponible sur Lulu.com, mot-clé Windev.
    http://www.lulu.com/shop/search.ep?t...ch=lulu.com&q=

  5. #25
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 39
    Points : 105
    Points
    105
    Par défaut SOLUTION pour définir SPI_SETDESKWALLPAPER dans WINDEV (ou toute autre API)
    il y a un Outil fourni (dans WD19 en tout cas) qui s'appelle WDAPI.EXE et qui permet d'importer le code de déclaration des API de Windows (au choix fonctions, types, constantes).

    Cette appli est accessible depuis l'onglet OUTILS => WDOUTILS => WDAPI.

    Dans l'onglet CONSTANTES de cet outil j'y ai trouvé la définition attendue et avec un simple clic sur "COPIER" on obtient le code suivant à coller dans son source :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CONSTANTE SPI_SETDESKWALLPAPER=20
    A partir de la, les API ça n'a plus rien de compliqué à intégrer, le code étant généré au format Windev.

    Cordialement.

    (Voir image ci joint de cet outil)

    Nom : WDAPI.png
Affichages : 2760
Taille : 54,4 Ko

  6. #26
    Membre habitué
    Avatar de jdsetls
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2012
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2012
    Messages : 209
    Points : 164
    Points
    164
    Billets dans le blog
    1
    Par défaut Outil limité
    Cet outil est très limité et la plupart des exemples doivent être modifiés ou adaptés.

    Si vous l'avez utilisé, donnez s'il vous plait quelques exemples.

    De mon côté je n'ai pas pu en faire grand chose, mais je ne demande que des exemples fonctionnels.

    Cordialement et merci,

    Jacques De Schryver
    Mon dernier livre Si c'est simple, c'est du Windev, version 2014, disponible sur Lulu.com, mot-clé Windev.
    http://www.lulu.com/shop/search.ep?t...ch=lulu.com&q=

  7. #27
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 39
    Points : 105
    Points
    105
    Par défaut EXEMPLE COMPLET POUR LE CHANGEMENT DE PAPIER PEINT WINDOWS VIA API
    Citation Envoyé par jdsetls Voir le message
    Si vous l'avez utilisé, donnez s'il vous plait quelques exemples.
    Jacques De Schryver
    J'ai fait un premier essai concluant qui vous guidera surement dans l'utilisation des autres API.

    1) J'ai tout condensé dans une COLLECTION DE PROCEDURES (nouvelle collection de procédure).
    2) J'ai d'abord défini toutes les constantes nécessaires que j'ai placé dans la zone de DECLARATION de ma COLLECTION DE PROCEDURES

    Voici les constantes ajoutées :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    CONSTANTE
    	SPI_GETBEEP=1
    	SPI_SETBEEP=2
    	SPI_GETMOUSE=3
    	SPI_SETMOUSE=4
    	SPI_GETBORDER=5
    	SPI_SETBORDER=6
    	SPI_GETKEYBOARDSPEED=10
    	SPI_SETKEYBOARDSPEED=11
    	SPI_LANGDRIVER=12
    	SPI_ICONHORIZONTALSPACING=13
    	SPI_GETSCREENSAVETIMEOUT=14
    	SPI_SETSCREENSAVETIMEOUT=15
    	SPI_GETSCREENSAVEACTIVE=16
    	SPI_SETSCREENSAVEACTIVE=17
    	SPI_GETGRIDGRANULARITY=18
    	SPI_SETGRIDGRANULARITY=19
    	SPI_SETDESKWALLPAPER=20
    	SPI_ICONVERTICALSPACING=24
    	SPI_GETICONTITLEWRAP=25
    	SPI_SETICONTITLEWRAP=26
    	SPI_GETMENUDROPALIGNMENT=27
    	SPI_SETMENUDROPALIGNMENT=28
    	SPI_SETDOUBLECLKWIDTH=29
    	SPI_SETDOUBLECLKHEIGHT=30
    	SPI_SETICONTITLELOGFONT=34
    	SPI_GETFASTTASKSWITCH=35
    	// pour le paramètre fWinIni
    	SPIF_SENDCHANGE=2//SPIF_SENDWININICHANGE
    	SPIF_SENDWININICHANGE=2//0x0002
    	SPIF_UPDATEINIFILE=1//0x0001
    FIN
    3) Ensuite je me suis fait une fonction Windev pour ENCAPSULER l'appel de l'API de façon Transparente (optionnel, mais je trouve ça plus pratique par la suite).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    // encapsulation de l'API SystemParametersInfoA dans une fonction WINDEV équivalente
    PROCEDURE WDSysParamInfo(uiAction est un entier sans signe,uiParam est un entier sans signe,pvParam est un entier système,fWinIni est un entier sans signe) : booléen
        RETOUR = API("USER32","SystemParametersInfoA",uiAction,uiParam,pvParam,fWinIni)
    ... ainsi quand on veut appeler l'API on tape directement WDSystemParameterInfo(....)

    4) l'API SystemParameterInfoA ayant de nombreux usages, je ne vais m'attarder que sur la définition d'un nouveau papier peint dans cet exemple et définir une procédure pour ce faire, appelant l'API :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    PROCEDURE SysParamInfo_SETDESKWALLPAPER(NomFichier est une chaîne ASCIIZ sur 256):booléen
      SI fFichierExiste(NomFichier) ALORS
     	RETOUR = WDSysParamInfo(SPI_SETDESKWALLPAPER,0,&NomFichier,SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE)
      SINON
    	Erreur("La procédure SysParamInfo_SETDESKWALLPAPER n'a pas pu aboutir !")
    	RETOUR = Faux
       FIN
    Notes importantes sur le code ci-dessus :
    - on doit passer le nom de fichier du Wallpaper sous forme de chaine à terminal 0 (ASCIIZ) tel que l'API le réclame.
    - un nom de répertoire windows + fichier fait (de mes souvenirs 256 caractères MAX, mais je pense qu'on peut définir son ASCIIZ a 1024 sans soucis, ça devrait aussi fonctionner)
    - on passera en paramètre le pointeur mémoire de cette chaine, soit la syntaxe &NomFichier (pointeur sur NomFichier)

    5) Enfin une fonction plus "USER FRIENDLY" pour appeler cette API pourrait être comme suit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    PROCEDURE ChangerWallPaper(sFichier est une chaîne)
      SI SysParamInfo_SETDESKWALLPAPER(sFichier) ALORS
    	Info("Le papier peint a été mis à jour !")
      SINON
    	Info("Un problème est survenu lors de la mise à jour du papier peint")
      FIN
    Important : Cette API a été conçue par Microsoft pour être utilisée avec des fichiers .BMP (avant l'apparition d'active Desktop de Internet Explorer (à partir de WIN98), qui a permis aux JPG d'être aussi affichés sur le bureau)
    // => je n'ai pas testé avec des JPG, et pas sur que ça marche !

    6) Vous n'avez plus qu'à tester cet ensemble en appelant depuis un bouton de formulaire avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     ChangerWallPaper("C:\DEV\OUISTITI.BMP")
    ... J'ai procédé en cascade, par fonction de fonction de fonction, pour être didactique, mais on peut bien sûr écrire un code beaucoup plus compact, et résumer cet ensemble en une seule fonction qui englobe tout.

    VOICI LA VERSION COMPACTE EN UNE SEULE FONCTION QUI FAIT TOUT (vous n'aurez qu'à y ajouter les CONSTANTES au dessus) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    PROCEDURE Changer_Wallpaper_COMPACTE(sNomFichier est une chaîne ASCIIZ sur 256)
     
      SI API("USER32","SystemParametersInfoA",SPI_SETDESKWALLPAPER,0,&sNomFichier,SPIF_SENDWININICHANGE | SPIF_UPDATEINIFILE) ALORS
       	Info("Le papier peint a été changé !")
      SINON
       	Info("Le papier peint n'a pas pu être changé !")
      FIN
    J'ai testé, et ça fonctionne bien (WD19 sous WIN 8.1).

    Bonne continuation

  8. #28
    Membre habitué
    Avatar de jdsetls
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2012
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2012
    Messages : 209
    Points : 164
    Points
    164
    Billets dans le blog
    1
    Par défaut Collections d'exemples pratiques
    Bonour,

    Je te remercie de ton exemple. Il est clair et bien défini.
    La méthode traduit bien la lourdeur souvent décourageante de l'utilisation des APIs.

    D'autant que pour répondre à ta question, en cliquant sur mon Vista du bouton droit de la souris, les jpeg proposent l'option Utiliser comme papier peint.

    Je suis à la recherche des utilisations utiles mais difficiles d'accès si on ne les programme pas.

    Par exemple, je ne sais pourquoi, c'est par les APIs que j'ai amélioré la trace de la souris au delà de ce que le panneau de configuration proposait
    Je ne sais toujours pas pourquoi...

    En explorant depuis l'outil API de Windev, je trouve des pistes. Parfois.

    Avant, voici une vingtaine d'années, j'avais l'énorme bouquin décrivant toutes les APIs, appelables depuis VB.

    Je te propose donc de lister les besoins que nous pourrions avoir de telles API, de telle façon qu'il puisse être plus économique pour l'utilisateur d'y faire appel que par tout autre moyen.

    Par exemple j'aimerais bien circonvenir les limites du presse-papier en format RTF Windev.

    Cordialement,
    Jacques De Schryver
    Mon dernier livre Si c'est simple, c'est du Windev, version 2014, disponible sur Lulu.com, mot-clé Windev.
    http://www.lulu.com/shop/search.ep?t...ch=lulu.com&q=

  9. #29
    Membre régulier
    Profil pro
    Inscrit en
    Février 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 39
    Points : 105
    Points
    105
    Par défaut WINDEV - Utilisation des API
    Citation Envoyé par jdsetls Voir le message
    Je te remercie de ton exemple. Il est clair et bien défini.
    C'est le but de ce forum, et c'est vrai que Windev n'est pas suffisamment connu pour avoir une communauté importante et fédérée d'utilisateurs qui partagent des données précises et fiables de résolutions de problèmes ou d'exemples commentés. Je pense que c'est en train de changer depuis que PCSOFT fournit une version EXPRESS suffisamment exploitable pour des projets étudiants et la découverte approfondie du logiciel avant de passer à la caisse. Longtemps je suis resté admiratif de leurs démonstrations "commerciales", mais sans pouvoir l'installer, on restait dans une "nébuleuse" quant aux réelles qualités du produit. La version 18 et 19 ont amorcé une "professionnalisation" de l'interface, avec notamment cette nouvelle barre d'outils à onglets, qui est beaucoup plus claire pour débuter, et la disparition de l'affreux tableau de bord de voiture (d'inspiration très geek). L'effacement progressif des donzelles, qui donnaient un côté sexiste macho latin puéril, joue aussi je pense sur l'aspect désormais plus crédible du produit.

    Citation Envoyé par jdsetls Voir le message
    La méthode traduit bien la lourdeur souvent décourageante de l'utilisation des APIs.
    ... les API sont l'héritage du cœur de Windows (toutes versions), et du prototypage des fonctions en C. Cette API n'a rien d'homogène, car de versions en versions Windows n'a pas toujours eu les mêmes capacités. Certaines API, ou certaines constantes ne sont pas utilisables sous certaines versions de l'OS (soit obsolètes, soit pour des versions ultérieures). C'est donc rapidement devenu un fourre tout assez indigeste, ni proche de son système, ni proche de leurs utilisateurs (les développeurs).

    ... les Frameworks sont apparus pour résoudre plusieurs problèmes liés aux API et plus généralement aux autres DLL. 1) un code plus proche de la logique utilisateur, 2) la disparition du problème des DLL de versions différentes avec DOTNET (chaque version du framework DOTNET a ses propres DLL dans ses propres répertoires), avant un nouveau programme avait vite fait d'écraser une DLL partagée de \system32 rendant incompatible certaines déclarations de fonctions avec d'autres programmes déja installés.

    Ces frameworks ont d'autres défauts (.NET est une usine à gaz, et cela ajoute surement quelques bugs, car ils contiennent beaucoup plus de code, ils sont forcément plus lents, mais c'est l’éternel débat entre langage de haut niveau et de bas niveau, tout dépend des besoins).

    Citation Envoyé par jdsetls Voir le message
    D'autant que pour répondre à ta question, en cliquant sur mon Vista du bouton droit de la souris, les jpeg proposent l'option Utiliser comme papier peint.
    ... Je viens de tester la constante SPI_SETDESKWALLPAPER avec les JPG, et au final ça fonctionne (sous WINDOWS 8.1 en tout cas). J'avais lu une info contradictoire sur un site, donc c'est probable qu'il y ait eu une version plus ancienne de l'OS qui ne gérait pas cette API avec les JPG.

    Citation Envoyé par jdsetls Voir le message
    Par exemple, je ne sais pourquoi, c'est par les APIs que j'ai amélioré la trace de la souris au delà de ce que le panneau de configuration proposait
    Je ne sais toujours pas pourquoi...
    ... Il existe des API non documentées dans Windows. Une partie minime des Fonctions ou Constantes que Microsoft n'a pas jugé nécessaire de révéler au grand public, mais qui a fini par se diffuser. Parfois aussi, ceux qui ont programmé les interfaces de configuration du système chez Microsoft se sont contentés de donner accès aux choses vraiment indispensables (comme par exemple un écran de configuration du fond d'écran). Mais certaines API surement prévues par l'équipe API qui a été en charge de les développer, n'ont pas été exploitées par l'équipe en charge de développer l'interface graphique de Windows.

    Citation Envoyé par jdsetls Voir le message
    En explorant depuis l'outil API de Windev, je trouve des pistes. Parfois.
    ... A ce sujet, et pour en revenir a l'outil WDAPI.EXE, l'exemple sur les API fourni par Windev devrait fonctionner, mais lorsqu'on utilise des API on doit toujours procéder par étapes (quel que soit le langage utilisé) :
    1) récupérer le code d'appel de l'API (dans l'onglet Fonctions de WDAPI)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    RetourFonction est un booléen // Type C :BOOL
    uiAction est un entier sans signe // Type C :UINT
    uiParam est un entier sans signe // Type C :UINT
    pvParam est un entier système // Type C :PVOID
    fWinIni est un entier sans signe // Type C :UINT
     
    RetourFonction=API("USER32","SystemParametersInfoA",uiAction,uiParam,pvParam,fWinIni)
    Ici tout est assez clair sur ce que nous dit WDAPI.EXE. On va piocher une fonction API de USER32.DLL, qui s'appelle SystemParametersInfoA, qui doit renvoyer un booléen (échec ou réussite), et a comme paramètres une ACTION (sous forme d'un numéro entier non signé, symbolisé par des constantes (plus digeste à (re)lire que des numéros)), suivi d'un paramètres numérique, suivi d'un paramètre pointeur, suivi d'un dernier paramètre entier non signé.

    Le param 1 : définit l'action parmi celles disponibles, et les autres paramètres sont utilisés de façon différente selon cette spécialisation. Dans le cas précis d'un changement de fond d'écran, le param 2 reste à 0, le param 3 est un pointeur sur le nom du fichier image à définir en fond, et le param3 une précision liée à la recopie de ce chemin dans le fichier WIN.INI (il me semble).

    d’où le nom générique uiParam et pvParam, (car ils sont utilisés comme "fourre-tout" selon ce qu'on veut passer dans un cas particulier). Il faut se référer au site Microsoft pour avoir les précisions dans notre cas précis d'utilisation : SystemParametersInfoA et ses Constantes attendues

    2) repérer dans cette ligne de code les CONSTANTES et STRUCTURES qui sont nécessaires
    C'est en consultant les API WINDOWS (documentées par Microsoft) qu'on doit savoir quelles constantes (ou structures) utilise telle API pour chacun de ses paramètres
    Elles sont listées sur cette page "officielle" de Microsoft (lien ci-dessus)

    On apprend par exemple la valeur exacte de la constante SPI_SETDESKWALLPAPER = 0x0014 (en hexadécimal), soit = 20 en décimal.

    Pour info : Microsoft ne traduit jamais ses pages (ou alors de manière automatisée, et donc déconseillé), il vaut mieux les aborder en anglais si possible.


    3) déclarer ces mêmes STRUCTURES & CONSTANTES dans notre code (qui sont nécessaires au fonctionnement de notre API).

    On constate donc qu'il nous faudra ajouter toutes les constantes commençant par SPI_ et SPIF_ qui sont listées dans WDAPI.EXE (mais qu'on peut trouver sur n'importe quelle page internet aussi, quitte à les convertir au format windev, ce ne sont jamais que des constantes du type A=20). Si vous voulez alléger votre code, vous pouvez n'ajouter que celles que vous utiliserez vraiment. Mais de toutes les avoir au départ évite de se casser la tête avec les copier-coller.

    Observation : les constantes débutent par SPI_ et SPIF_ pour (S)ystem(P)arameter(I)nfo , c'est donc les constantes qui sont réservées uniquement à l'usage de cette API (ce ne sont que des conventions établies par microsoft, mais un moyen rapide de les filtrer).

    Ces 3 étapes, c'est une chose que l'on ne précise surement jamais nul part, et qui est peut être bête à dire à un initié aux API, mais quand on ne le sait pas, on galère des heures sans jamais comprendre pourquoi ça ne marche pas les API, ou pourquoi il manque un élément.

    Citation Envoyé par jdsetls Voir le message
    Avant, voici une vingtaine d'années, j'avais l'énorme bouquin décrivant toutes les APIs, appelables depuis VB.
    ... C'est le même principe pour VB les API, la difficulté c'est toujours de bien définir les types exacts des paramètres au format attendu par le langage C (Asciiz, pointeur sur chaine, long non signé, dword ...). Si vous aviez un énorme bouquin, c'est surement parce que VB était plus distribué dans le monde, et aussi que VB ça reste Microsoft, tout comme les WINAPI.
    ... On ne peut pas demander à PCSOFT (petite équipe) de suivre l'évolution de toutes les API de Microsoft, et de les documenter alors même qu'elles ont tendance à être piégeuses, modifiées selon l'OS, parfois secrètes, ou non documentées, et évolutives, sans même parfois que Microsoft ne le précise officiellement. De plus, a l'époque, les API étaient surement beaucoup plus condensées. IL y a 20 ans, sous Windows 3.11, on pouvait faire beaucoup moins de choses. Ne serait-ce que naviguer sur internet était impossible, pas d'USB, pas de gestion réseau unifiée et intégrée, on se basait souvent sur des drivers et DLL propriétaires lorsqu'on voulait faire quelque chose d'autre, et donc pas sur les API microsoft.


    Citation Envoyé par jdsetls Voir le message
    Je te propose donc de lister les besoins que nous pourrions avoir de telles API, de telle façon qu'il puisse être plus économique pour l'utilisateur d'y faire appel que par tout autre moyen.
    Par exemple j'aimerais bien circonvenir les limites du presse-papier en format RTF Windev.
    ... en fait je viens seulement de débuter en Windev, depuis quelques semaines. Je suis a la base programmeur en VB. Je n'ai donc pas beaucoup d'avis sur des choses aussi précises concernant WINDEV. J'utilise pour le moment la version EXPRESS, car je dois évaluer la difficulté que j'aurai (ou pas) à porter un projet que je développe actuellement sous Microsoft Access, avant d'en acquérir une licence (notamment en terme de souplesse sur les requêtes, et les états). Je ne peux donc pas connaitre d'emblée ce qui manque à Windev et serait utile de piocher dans les API.

    J'interviendrai surement à nouveau sur les forums Windev de developpez.net, si j'apprends quelques subtilités intéressantes et mal documentées. Pour le moment mon casse tête, c'est de ne pas arriver à utiliser le Treeview MSCOMCTL de Microsoft en tant qu'ActiveX. Je créerai surement un topic pour ce faire.

    Bonne continuation.
    Franck.

  10. #30
    Membre habitué
    Avatar de jdsetls
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2012
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2012
    Messages : 209
    Points : 164
    Points
    164
    Billets dans le blog
    1
    Par défaut Usage réel des APIs
    Bonjour,
    Quand j'ai découvert le pavé sur les APIs, j'ai eu l'impression que tout devenait possible.
    Mais cela restait verbeux.
    Puis j'ai repris goût à programmer avec Windev 5... qui me rappelait les bons langages avec séquentiel ndexé multiclés multicritères, déjà sur Apple2, créés par deux ingénieurs de l'école des mines.
    Un grand trou puis PCSoft...
    Aujourd'hui, sans nostalgie, je me demande ce qu'on peut réellement faire de pratique avec les APIs...
    Et je pioche, de temps en temps...
    Cordialement,
    Jacques De Schryver
    Mon dernier livre Si c'est simple, c'est du Windev, version 2014, disponible sur Lulu.com, mot-clé Windev.
    http://www.lulu.com/shop/search.ep?t...ch=lulu.com&q=

  11. #31
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Aujourd'hui, sans nostalgie, je me demande ce qu'on peut réellement faire de pratique avec les APIs...
    Absolument tout, lorsqu'on est un programmeur SDK bas niveau et que l'on utilise des compilateurs qui génèrent du véritable code machine.

    Je parle de programmes ne nécessitant aucun run-time, ni framework monstrueux de type DotNET ou autre, car tout est déjà dans l'API qui fait partie intégrante de Windows. Tous les frameworks supplémentaires ne sont qu'une encapsulation plus ou moins lourde de la Flat API.

    Par exemple, même en C++ les API de GDIPLUS sont encapsulées dans des classes, alors qu'il est tout à fait possible d'utiliser directement la Flat API GDIPLUS en mode procédurale, de ce fait on n'utilise que le code dont on a vraiment besoin sans charger en mémoire tout un tas de dépendances inutiles.

    Pour ceux qui connaissent la programmation bas niveau, il est encore possible décrire des programmes ahurissants dans moins de 100 Ko, voir même moins de 10 Ko.

    Pour vous en convaincre regardez ce que sont capables de faire les demomakers dans 179 Ko : Debris

    ...

  12. #32
    Membre éprouvé
    Inscrit en
    Avril 2008
    Messages
    1 129
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1 129
    Points : 1 283
    Points
    1 283
    Par défaut
    A-H-U-R-I-S-S-A-N-T

    Je suis bouche bée....177kb

  13. #33
    Membre habitué
    Avatar de jdsetls
    Homme Profil pro
    Rédacteur technique
    Inscrit en
    Décembre 2012
    Messages
    209
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 75
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Rédacteur technique
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Décembre 2012
    Messages : 209
    Points : 164
    Points
    164
    Billets dans le blog
    1
    Par défaut TI 99 et autres
    Bonjour,
    Cela me rappelle les programmes de statistiques que nous developpions sur TI99, donc quasiment en langage machine et qui nous éblouissaient par leurs performances.

    Et les disques durs Bull quon interfaçait sur Apple2.
    10.000€ pour 20 Mo dont 10 amovibles.
    Une merveille.
    Aujourd'hui 130€ pour 3 Teraoctets soit 150.000 fois plus de place pour 80 fois moins d'argent.
    Donc 12 millions de fois moins cher l'octet stocké.

    A quand une telle bonification des salaires et retraites ?

    Cordialement,
    Jacques De Schryver

    nb : Hollande, prend des informaticiens pour ministres !
    Mon dernier livre Si c'est simple, c'est du Windev, version 2014, disponible sur Lulu.com, mot-clé Windev.
    http://www.lulu.com/shop/search.ep?t...ch=lulu.com&q=

  14. #34
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Citation Envoyé par Patrice Terrier Voir le message
    ...

    Pour vous en convaincre regardez ce que sont capables de faire les demomakers dans 179 Ko : Debris

    ...
    5 alertes virus sur l'exécutable, je prendrais tout de même des pincettes avant de le lancer, même s'il est fort possible que ce soit des faux positifs.

    https://www.virustotal.com/fr/file/3...is/1409052313/
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  15. #35
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    486
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 486
    Points : 875
    Points
    875
    Par défaut
    Eric--

    Vous n'êtes pas obligé de me faire confiance, mais ne faites pas non plus trop confiance aux anti-virus qui préfèrent déclarer une suspicion de virus lorsqu'ils sont incapables d'analyser correctement certains fichiers compressés.

    Car l'EXE en question contient outre le code, le fichier audio et les textures en format compressé.

    Depuis que j'utilise MSE (l'antivirus gratuit de Microsoft) je n'ai plus jamais de faux positifs.

    ...

  16. #36
    Membre émérite
    Avatar de DelphiManiac
    Homme Profil pro
    Homme à tout faire
    Inscrit en
    Mars 2002
    Messages
    1 147
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Homme à tout faire
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 147
    Points : 2 533
    Points
    2 533
    Par défaut
    Patrice,

    Ce n'est pas en toi que je n'ai pas confiance ! c'est dans la source du fichier.

    Virustotal, passe les fichiers qu'on lui soumets à environ 55 antivirus. 5 antivirus sur les 55 signalent quelque chose de suspect. Il est certain que les analyses heuristiques des anti-virus sont quelque peu sensible à tout comportement qui peut paraître suspect. Le fichier provenant d'un groupe de demomaker, il est fort possible que les méthodes de compression de l'exécutable leur paraissent suspect et que du coup ce soit potentiellement des faux positif, mais dans le doute, je pratique avec précaution.

    Et concernant MSE, on ne peut pas dire que ce soit la référence dans le domaine des anti-virus. Sur une base de 10001 virus, MSE en détecte 7988 alors que le meilleur 9967. Déjà qu'il laisse passer environ 20% des virus sur ce test, ce serait quelque peu grossier qu'il signale en plus des faux positifs

    Source : http://www.clubic.com/antivirus-secu...-defender.html



    Par ailleurs, chacun est libre d'avoir le comportement qu'il veut par rapport à des menaces potentielles, ce n'étais là qu'un signalement.
    Si ce message vous a semblé utile, il est possible qu'il soit utile à d'autres personnes. Pensez au . Et n'oubliez pas le le moment venu !

    On n'a pas à choisir si l'on est pour ou contre la décroissance, elle est inéluctable, elle arrivera qu'on le veuille ou non.

  17. #37
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    17
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 17
    Points : 21
    Points
    21
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    //Dessine Droite + Pixel dans une Image
    ret est un entier = 0
    hdc est un entier = 0
     
    hdc = AppelDLL32("user32", "GetDC", Handle(Image1))
     
    x, y est un entier
    x = 150
    y = 150
    POUR i = 1 A 150
    	Multitâche(1)
    	ret = AppelDLL32("gdi32","SetPixel", hdc, x-i, y-i, RVB(42, 164, 211))
    FIN
     
    Trace(ret)
    GDI => Symbole Nucléaire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    //GDI => Symbole Nucléaire :
    //---------------------------
    ret est un entier = 0
    hdc est un entier = 0
    X1 est un entier = 0
    Y1 est un entier = 0
    X2 est un entier = 0
    Y2 est un entier = 0
    X3 est un entier = 0
    Y3 est un entier = 0
    X4 est un entier = 0
    Y4 est un entier = 0
     
    hdc = AppelDLL32("user32", "GetDC", Handle(Image1))
     
    //' Disque du haut
    X1 = 5
    Y1 = 5
    X2 = 205
    Y2 = 205
    X3 = 165
    Y3 = 5
    X4 = 45
    Y4 = 5
    //Pie Me.hdc, 5, 5, 205, 205, 165, 5, 45, 5
    ret = AppelDLL32("gdi32","Pie", hdc, X1, Y1, X2, Y2, X3, Y3, X4, Y4)
    Trace(ret)
     
    //' Disque du bas à gauche
    X1 = 5
    Y1 = 5
    X2 = 205
    Y2 = 205
    X3 = 5
    Y3 = 113
    X4 = 50
    Y4 = 205
    //Pie Me.hdc, 5, 5, 205, 205, 5, 113, 50, 205
    ret = AppelDLL32("gdi32","Pie", hdc, X1, Y1, X2, Y2, X3, Y3, X4, Y4)
    Trace(ret)
     
    //' Disque du bas à droite
    X1 = 5
    Y1 = 5
    X2 = 205
    Y2 = 205
    X3 = 160
    Y3 = 205
    X4 = 205
    Y4 = 113
    //Pie Me.hdc, 5, 5, 205, 205, 160, 205, 205, 113
    ret = AppelDLL32("gdi32","Pie", hdc, X1, Y1, X2, Y2, X3, Y3, X4, Y4)
    Trace(ret)=
    Fenetre ou Champs Triangle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    pt1 est un tableau de 6 entiers
    pt1[1]=Fen_Principal..Largeur 
    pt1[2]=Fen_Principal..Hauteur 
    pt1[3]=0 
    pt1[4]=Fen_Principal..Hauteur 
    pt1[5]=Fen_Principal..Largeur/2 
    pt1[6]=0 
     
    region est un entier=AppelDLL32("gdi32","CreatePolygonRgn",&pt1,3,1) 
    AppelDLL32("user32","SetWindowRgn",Handle(),region,1) 
    AppelDLL32("gdi32","DeleteObject",region)
    Donne la Derniere Erreur d'execution d'un API
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Démonstration d'interception d'erreur de handle
    retval est un entier long
    errcode est un entier long
    // Ce code vous est offert par Beaussier en ligne
    // Produisons un appel invalide en utilisant la fonction suivante
    // et en lui donnant un handle invalide : -1 n'existe pas !
    retval = AppelDLL32("kernel32", "CloseHandle", -1)
    SI retval = 0 ALORS
       errcode = AppelDLL32("kernel32", "GetLastError")
       SI errcode = 6 ALORS Erreur("Handle spécifié invalide")
    FIN

  18. #38
    Membre émérite
    Homme Profil pro
    Inscrit en
    Octobre 2007
    Messages
    1 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations forums :
    Inscription : Octobre 2007
    Messages : 1 075
    Points : 2 441
    Points
    2 441
    Par défaut
    Citation Envoyé par tontonpolak Voir le message
    // Démonstration d'interception d'erreur de handle
    retval est un entier long
    errcode est un entier long
    // Ce code vous est offert par Beaussier en ligne
    // Produisons un appel invalide en utilisant la fonction suivante
    // et en lui donnant un handle invalide : -1 n'existe pas !
    retval = AppelDLL32("kernel32", "CloseHandle", -1)
    SI retval = 0 ALORS
    errcode = AppelDLL32("kernel32", "GetLastError")
    SI errcode = 6 ALORS Erreur("Handle spécifié invalide")
    FIN
    Bonjour tontonpolak,

    Puis-je vous signaler l'existence d'une balise [code] (voir III-E), qui éclairera vos messages d'une lumière nouvelle. Si, si ...

    Par exemple, votre code ci-dessus :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    // Démonstration d'interception d'erreur de handle
    retval est un entier long
    errcode est un entier long
    // Ce code vous est offert par Beaussier en ligne
    // Produisons un appel invalide en utilisant la fonction suivante
    // et en lui donnant un handle invalide : -1 n'existe pas !
    retval = AppelDLL32("kernel32", "CloseHandle", -1)
    SI retval = 0 ALORS
       errcode = AppelDLL32("kernel32", "GetLastError")
       SI errcode = 6 ALORS Erreur("Handle spécifié invalide")
    FIN
    Hemgé

Discussions similaires

  1. [Généralités] Utilisation des classes sous windev
    Par gersen dans le forum WinDev
    Réponses: 5
    Dernier message: 15/01/2013, 17h15
  2. Wikiloc : exemple d'utilisation des API SFR dans un script PHP
    Par hhoareau dans le forum Contribuez / Téléchargez Sources et Outils
    Réponses: 0
    Dernier message: 22/02/2011, 11h16
  3. Wikiloc : exemple d'utilisation des API SFR dans un script PHP
    Par hhoareau dans le forum Téléchargez
    Réponses: 0
    Dernier message: 22/02/2011, 11h16
  4. Exemple d'utilisation de l'API JFreeChart avec JasperReports
    Par Fleur-Anne.Blain dans le forum Contribuez
    Réponses: 0
    Dernier message: 21/05/2009, 10h57
  5. Réponses: 0
    Dernier message: 07/05/2009, 14h28

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo