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.

Envoyé par
jdsetls
...
Reprenons le code d'origine :
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 :
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.aspxDonc 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
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 |