Utilisez-vous les API Windows
De quelle façon et pour quelle raison ?

Le , par jdsetls

49PARTAGES

1  1 
Utilisez-vous les API Windows ?
Bonjour,

Qui utilise les API Windows et de quelle façon ?
J'ai l'impression qu'on peut absolument tout faire avec, sauf qu'elles sont un peu décourageantes en terme de convivialité.

Qu'en pensez-vous ?

Merci
Cordialement

Une erreur dans cette actualité ? Signalez-le nous !

Avatar de Hibernatus34
Membre expérimenté https://www.developpez.com
Le 28/05/2014 à 10:59
Citation Envoyé par jdsetls Voir le message
Bonjour,
Suite au message de Delphimaniac fustigeant les analphabètes qui lui font perdre son temps sous le vague prétexte qu'ils sont en retraite...
Je confirme que la rupture de syntaxe se trouve sur le site Microsoft :

http://msdn.microsoft.com/en-us/library/windows/desktop/ms724947%28v=vs.85%29.aspx

Citation :
SPI_GETSHOWIMEUI = 110
SPI_SETSHOWIMEUI = 111
SPI_GETMOUSESPEED = 112
SPI_SETMOUSESPEED = 113
SPI_GETSCREENSAVERRUNNING = 114
SPI_GETDESKWALLPAPER = 115
SPI_GETACTIVEWINDOWTRACKING = &H1000
SPI_SETACTIVEWINDOWTRACKING = &H1001
SPI_GETMENUANIMATION = &H1002
SPI_SETMENUANIMATION = &H1003
SPI_GETCOMBOBOXANIMATION = &H1004
SPI_SETCOMBOBOXANIMATION = &H1005
SPI_GETLISTBOXSMOOTHSCROLLING = &H1006

Voilà, voilà...
Cordialement
Vous lisez aussi bien ce forum que le MSDN :
- Ce n'est pas DelphiManiac, mais moi, Hibernatus34.
- Ce que vous avez trouvé sur le MSDN est un commentaire d'utilisateur et non la doc Microsoft.

Comme ça fait au moins 4 fois* qu'on vous le dit, je vais le répéter : C'EST UN COMMENTAIRE D'UN UTILISATEUR, qui ne travaille pas chez Microsoft

Avez-vous enfin compris ?

Quant à mon commentaire, il fait la nuance entre discuter et parler de quelque chose, quand la personne en face ne semble pas avoir les aptitudes requises pour suivre et alimenter la discussion. (un analphabète dans le cas de la littérature...)

*: On vous l'a expliqué ici, ici et .
C'est juste impressionnant. Autant parler à une chaise...
7  0 
Avatar de DelphiManiac
Membre émérite https://www.developpez.com
Le 28/05/2014 à 10:52
Citation Envoyé par jdsetls Voir le message
Bonjour,
Cette question posée par Delphimaniac me laisse perplexe.
Qui est l'analphabète de qui, de son point de vue ?
Se serait-il levé avec les poils du nez qui le grattent ?
Nul doute que Delphimaniac est un homme sérieux et professionnel.
N'est-il pas en décalage, dans ce forum d'entraide, à ne pas vouloir "discuter avec des analphabètes" ?
Je croyais au contraire que le but était précisément d'aider l'ignorant à accéder à la connaissance.
Je veux bien être son analphabète personnel, cependant j'ai été PDG de mon cabinet informatique, avec onze salariés, et j'ai publié 22 livres informatiques.
Je veux bien croire que le magnifique portrait caricatural que j'affiche comme avatar puisse l'induire en erreur.
Allez Delphimaniac, je t'aime bien.
Cordialement
.
Quand on essaye de faire un trait d'humour en reprenant les termes de quelqu'un, on essaye au moins de ne pas se tromper de personne, encore plus quand le sujet traite d'analphabétisme :p
6  0 
Avatar de Ry_Yo
Membre éprouvé https://www.developpez.com
Le 22/05/2014 à 15:49
Citation Envoyé par jdsetls Voir le message
..................
...
Il me semble avoir lu exhaustivement tout cela. Si vous n'arrivez pas à illustrer l'exemple, alors c'est que vous avez lu autant que moi.
...
Cordialement
Je ne suis pas là pour écrire à votre place, "je ne comprends pas" n'est pas assez précis pour moi. Qu'est-ce que vous ne comprenez pas ? l'aide de la msdn, l'aide de windev pour la fonction API() ?

Mais vu que vous doutez de la pertinence de mes posts.... J'ai bien compris que vous n'avez jamais manipulé les API avec Windev. Donc dans un autre de vos post, je vous ai dis de vous penchez sur WDAPI.EXE afin d'avoir déjà une structure à peu près correcte :
http://www.developpez.net/forums/d1440729/environnements-developpement/windev/exemples-d-utilisation-d-api-sous-windev/#post7822002

Donc après avoir lancé WDAPI vous auriez écrit quelque chose comme ça :
Code : Sélectionner tout
1
2
3
4
5
6
7
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)
Ensuite vous dites que l'aide de la msdn est incompréhensible, à cela je vous ai répondu oui et non. tout comme l'aide de PCSOFT ou le manuel d'utilisation d'un boeing 747... il faut un minimum de connaissance pour la comprendre.

Code : Sélectionner tout
1
2
3
4
5
6
BOOL WINAPI SystemParametersInfo(  <--Cela signifie que SystemParametersInfo() est une fonction qui retournera un booléen
  _In_     UINT uiAction,              <-- _In_ signifie paramètre d'entrée
  _In_     UINT uiParam,               <-- _In_ signifie paramètre d'entrée
  _Inout_  PVOID pvParam,           <-- _InOut_ signifie pointeur paramètre d'entrée/sortie
  _In_     UINT fWinIni                  <-- _In_ signifie paramètre d'entrée
);
Voilà....

Maintenant imaginons que je veuille récupérer la vitesse de la souris. Je continu de lire l'aide de la MSDN et je tombe sur ça :

SPI_GETMOUSESPEED
0x0070

Retrieves the current mouse speed. The mouse speed determines how far the pointer will move based on the distance the mouse moves. The pvParam parameter must point to an integer that receives a value which ranges between 1 (slowest) and 20 (fastest). A value of 10 is the default. The value can be set by an end-user using the mouse control panel application or by an application using SPI_SETMOUSESPEED.
Donc super je sais que le paramètre "uiParam" doit être égale à SPI_GETMOUSESPEED qui est égale à la valeur 0x0070

Donc si je veux pas m'embêter à convertir de l'hexa en décimal j'écris ça :
Code : Sélectionner tout
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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
nVitesse est un entier

uiParam = 0
uiAction = 0x0070 //récup les infos
pvParam = &nVitesse 
fWinIni = 0

RetourFonction=API("USER32","SystemParametersInfoA",uiAction,uiParam,pvParam,fWinIni)
info(nVitesse)
à la question pourquoi uiParam = 0, toujours en lisant l'aide :
uiParam [in]

Type: UINT

A parameter whose usage and format depends on the system parameter being queried or set. For more information about system-wide parameters, see the uiAction parameter. If not otherwise indicated, you must specify zero for this parameter.
En gros cela dit que ce paramètre est optionnel, il dépend du type de paramètre système que l'on manipule. En l'occurrence ici récupérer la vitesse de la souris ne soit pas obligatoire. Par défaut j'ai mis zéro...

Et même réponse pour le paramètre fWinIni

En conclusion vous devriez avec un code qui vous renvoi la vitesse de la souris qui est compris entre 1 et 20. amusez-vous dans le panneau de configuration à modifier cette valeur et lancer le morceau de code, miracle, on récupère bien la vitesse de la souris.

Une fois de plus, je n'ai rien inventé, mais je prends le temps nécessaire à comprendre "l'aide en ligne" soit directement, soit grâce à google....

EDIT : Pour ma défense, sachez que je suis un développeur 100% WLangage, je n'ai jamais travaillé sur d'autres langage (à peine étudier).
3  0 
Avatar de michel.souris
Membre chevronné https://www.developpez.com
Le 23/05/2014 à 11:31
Je pense que vous être très mal placé pour parler de post auto-satisfait...

Franchement je pense que les autres participants ne sont pas là pour vous fournir du code mais pour partager et discuter ! Ils ne s'efforcent pas de montrer qu'ils connaissent le C mais vous expliquent la forte importance d'un minimum de connaissance pour arriver à faire ce que vous voulez : une collection de fonction permettant un accès simplifié au API Windows...
Ensuite vous élargissez le débat en parlant d'API Web.... puis maintenant de DLL d'une façon générique... bon bref vous partez dans tout les sens et plus personne ne vous suis.

Enfin, vu votre manque d'implication (avez vous lu la doc d'Hibernatus ?, avez-vous consulter la page d'aide pour les conversions de types ?), je vous suggère de vous contenter des API "surcouché" par Windev et d’arrêter de rêver !

Je n'ai rien apporté au débat mais je remercie grandement les "experts" API qui nous ont abreuvés de leurs connaissances.

Bon courage à ceux qui essayeront de parler avec vous. Moi aussi j'arrête.
3  0 
Avatar de Patrice Terrier
Membre averti https://www.developpez.com
Le 24/05/2014 à 20:41
Non vous passez d'une propriété à l'autre, pas d'une API à l'autre, les 2 mots désignent des choses biens différentes.
Une propriété n'est pas une API.

...
3  0 
Avatar de Patrice Terrier
Membre averti https://www.developpez.com
Le 25/05/2014 à 9:15
Les programmeurs bas niveau, utilisent le mot API (Application Programming Interface) chaque fois qu'ils utilisent une fonction disponible dans le Kit de développement (SDK) fourni par Microsoft pour créer des logiciels Windows.
Toutes ces API sont d'ores et déjà documentées sur le site de MSDN, chacune dans sa propre catégorie (DLL), GDI32, KERNEL32, USER32, GDIPLUS, DWM, etc.

Dit d'une autre façon, les API sont un ensemble de fonctions et de procédure normalisées que l'on peut utiliser avec le Framework natif de Windows, qui est disponible sur toutes les machines utilisant cet OS.

Il ne s'agit pas d'un débat sémantique, voici ce que le résultat d'une simple recherche google avec "Windows API definition", vous donnera comme réponses
http://fr.wikipedia.org/wiki/Windows_API
http://fr.wikipedia.org/wiki/Interfa..._programmation
http://www.techterms.com/definition/api
etc.
3  0 
Avatar de michel.souris
Membre chevronné https://www.developpez.com
Le 28/05/2014 à 10:17
Il a vraiment que ça a foutre.... vivement la retraite que je m'éclate avec google !!!!

En fait il se fout de nous depuis le début... c'est une performance artistique !
3  0 
Avatar de Ry_Yo
Membre éprouvé https://www.developpez.com
Le 22/05/2014 à 11:07
Citation Envoyé par jdsetls Voir le message
...

Pour autant, en l'absence d'exemples je ne comprends pas ce qu'elle fait :
Retrieves or sets the value of one of the system-wide parameters. This function can also update the user profile while setting a parameter.

C'est beau !!!
Je me souviens que le péché mortel en pédagogie est le présupposé. On suppose que le lecteur connait déjà.

Donc merci de lister ici des exemples clairs d'API, afin de stimuler les rares neurones qui me restent.
Cordialement
Bonjour, vous parlez de stimuler les neurones, c'est que vous avez une envie d'apprendre. Donc si vous prenez le temps calmement de lire l'aide, vous auriez les réponses à vos interrogations.

Vous sortez une phrase du contexte, il est donc normal que personne ne comprenne rien. Il est clair que n'importe qui se poserait des questions à la lecture de la phrase que vous avez sorti comme ça sans le reste de l'aide.
Si je m'amuse à faire la même analogie avec l'aide de windev :
HLitRecherche (Fonction)
Positionne sur le premier enregistrement du fichier de données dont la valeur d'une rubrique spécifique est supérieure ou égale à une valeur recherchée (recherche générique). L'enregistrement est lu et les variables HFSQL correspondantes sont mises à jour.
Hein, quoi ? c'est quoi un fichier de données, une rubrique ? c'est quoi les variables HFSQL ? Ca veut dire que HLitRecherche attend une fonction en paramètre ?
Pour vous citez :
Citation Envoyé par jdsetls Voir le message
...
Je me souviens que le péché mortel en pédagogie est le présupposé. On suppose que le lecteur connait déjà.
Bref, donc si vous prenez le temps de lire et comprendre l'aide de la msdn : Cette fonction permet de récupérer ou modifier un paramètre système (windows)

Je vois déjà la question suivante : oui, mais je ne sais pas c'est quoi un paramètre système ? et qu'est-ce que je dois écrire.

Toujours un peu plus bas dans l'aide de la msdn :
http://msdn.microsoft.com/en-us/library/windows/desktop/ms724947%28v=vs.85%29.aspx

The system-wide parameter to be retrieved or set. The possible values are organized in the following tables of related parameters:

Accessibility parameters
Desktop parameters
Icon parameters
Input parameters
Menu parameters
Power parameters
Screen saver parameters
Time-out parameters
UI effect parameters
Window parameters
....
S'en suit l'énumération de tous les paramètres modifiable pour chaque famille de paramètres.

Puis comme pour l'aide windev, un détail de la valeur attendu pour chaque paramètre.
2  0 
Avatar de michel.souris
Membre chevronné https://www.developpez.com
Le 22/05/2014 à 18:03
Je crois que vous en demandez beaucoup !

Hibernatus nous a fourni une documentation claire, accessible au non-initié au C et franchement j'ai pas encore tout lu mais ça me semble bien complet.... !

Ensuite on vous a fourni (Patrice Terrier je crois) un lien vers la page MSDN qui liste les API Windows disponibles...

Enfin Ry_Yo vous donne un exemple et les clés pour ré-exploiter sa méthode avec d'autre API.... Avez-vous essayé de modifier la vitesse du pointeur comme il vous invite à le faire ? afin de constater que le résultat n'est pas toujours 1....

Je crains qu'une série exhaustive d’exemple d'implémentation des API Windows en Windev ne soit pas prévu au programme de cette année...
2  0 
Avatar de Ry_Yo
Membre éprouvé https://www.developpez.com
Le 22/05/2014 à 18:14
Avant de répondre à une de vos questions, je voudrais vous faire une remarque globale :
Votre approche pour comprendre comment utiliser une API n'est pas bonne du moins c'est ce qu'il ressort de ce post, pour faire une analogie, si je résume ce post, c'est comme si vous étiez en Chine, devant un chinois avec un dico chinois et vous ouvrez une page au hasard et vous me dites, c'est ce mot que je veux lui dire !
Sans comprendre ce que veut dire le mot en question, mais avec certitude, c'est ce mot ! Un linguiste vous dira qu'il faudra certainement d'autres mots pour constituer une phrase ou du moins une forme minimal de grammaire pour que le mot prenne son sens. Et encore en espérant que le mot en question ne soit pas une insulte !

Donc de manière général, on veut utiliser une API pour une raison précise pour combler une carrence du WLangage, du coup comme la recherche est orientée, on passe une longue liste d'API à une API avec plusieurs méthode grâce à google ou autres support...

C'est pour cela que pour vous aider, le problème n'était pas comment on se sert d'une API, mais comment récupérer la vitesse de déplacement de la souris. Afin d'orienté les recherches et simpifié la compréhension pour ensuite la généraliser.

Citation Envoyé par jdsetls Voir le message
...
Reprenons le code d'origine :
Code : Sélectionner tout
1
2
3
4
5
6
BOOL WINAPI SystemParametersInfo(
  _In_     UINT uiAction,
  _In_     UINT uiParam,
  _Inout_  PVOID pvParam,
  _In_     UINT fWinIni
);
Je comprends que vous définissez des types de variables.
Moi qui ne connais pas le C, je me pose la question encore sans réponse de savoir comment on passe de l'un à l'autre, en listant la longue liste exhaustive des API Windows, et surtout grâce à vous ?
Et évidemment comment je peux le faire sans vous la prochaine fois.
...
Vous avez choisi au hasard cette API. Ok, regardons de plus près l'analogie avec Windev vue que vous êtes concentré uniquement sur le WLangage :
Code : Sélectionner tout
PROCEDURE SystemParametersInfo(LOCAL uiAction est un entier systeme, LOCAL uiParam est un entier systeme, pvParam est un entier systeme, LOCAL fWinIni est un entier systeme)
Pourquoi j'ai déclaré uiAction comme entier systeme ? (ou sans signe...) parce que j'ai demandé à google à quoi correspondait le type UINT ? :
http://msdn.microsoft.com/fr-fr/library/x0sksh43.aspx

Donc si vous avez pris le temps de lire on peut "traduire"

_In_ par LOCAL en effet la valeur ne sera pas modifier par l'appel de la procédure, on parle de passage de paramètre par valeur et non référence
_InOut là par contre la variable sera modifié par la procédure, c'est presque un passage de paramètre par référence, mais nan, car on passe l'adresse de la variable, donc on se doute que c'est la fonction qui fera la modification

UINT c'est donc le typage du paramètre

uiAction est donc le nom du paramètre
Donc maintenant si vous avez compris le concept, votre fonction SystemParametersInfo() attend combien de paramètre ? --> réponse : 4
Que dit l'aide PCSOFT sur la fonction API() :
http://doc.pcsoft.fr/fr-FR/?3014005&name=api_fonction
Code : Sélectionner tout
1
2
3
4
5
6
Exécuter une fonction d'une DLL externe ou de l'API Windows identifiée par son nom Masquer les détails
<Résultat> = API(<Nom de la DLL> , <Nom de la fonction> [,  [,  [, ...]]])

Donc il faudra 4 paramètres à l'appel de cette fonction.

RetourFonction=API("USER32","SystemParametersInfoA",.....)
Enfin là où vous n'avez pas vu la subtilité avec les pointeurs, c'est la valeur de la variable nVitesse qui sera modifié. La valeur de pvparam contient l'adresse de nVitesse. Donc elle est inchangé pour une instance donnée. Donc si vous affichiez plutôt la valeur de nVitesse, vous verrez qu'elle sera comprise entre 1 et 20.
2  0 
Contacter le responsable de la rubrique WinDev

Partenaire : Hébergement Web