XL 2016 VBA - Déclarations des fonctions l'API Windows

Dudu2

XLDnaute Barbatruc
Bonjour,

Je voudrais avoir la confirmation de la manière de déclarer les fonctions de l'API Windows selon les constantes de compilation prédéfinies. Avec l'exemple de GetParent().

J'ai vu ce type de déclaration...
VB:
#If VBA7 Then
    #If Win64 Then
        Declare PtrSafe Function GetParent Lib "user32" (ByVal hwnd As LongPtr) As LongPtr
    #Else
        Declare PtrSafe Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
    #End If
#Else
    Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
#End If

Mais la doc Windows dit:
Les variables LongPtr (long integer sur les systèmes 32 bits, longLong integer sur les systèmes 64 bits)
Donc ceci devrait suffire non ?
VB:
#If VBA7 Then
    Declare PtrSafe Function GetParent Lib "user32" (ByVal hwnd As LongPtr) As LongPtr
#Else
    Declare Function GetParent Lib "user32" (ByVal hwnd As Long) As Long
#End If

D'autre part, question subsidiaire, dans cette page par ailleurs très utile, je vois ça:
VB:
#If Win64 Then
    Declare PtrSafe Function GetWindowLongPtr Lib "user32" Alias "GetWindowLongPtrA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr
#Else
    Declare PtrSafe Function GetWindowLongPtr Lib "user32" Alias "GetWindowLongA" (ByVal hwnd As LongPtr, ByVal nIndex As Long) As LongPtr
#End If

Qu'est-ce qui est la "vraie" référence à la fonction ? GetWindowLongPtr ou GetWindowLongPtrA / GetWindowLongA?


Merci par avance.
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Mais je sais bien @Staple1600, on discute Regarde la pièce jointe 1151686.


Oui, c'est sûr, mais parfois on est bien content de proposer des boutons libellés aux différentes options / choix à proposer à l'utilisateur. Et je te garantis que ça m'est très utile assez souvent. Sinon on fait quoi ? Un InputBox avec des choix de 1 à n construits en String et le choix à saisir ? Ok, ça peut se faire...
Jadis, je faisais des classeurs hyper-chiadés avec tout plein d'userform et de VBA, destinés à mes collègues.

Puis un jour, quand j'en ai eu marre qu'ils me dérangent pour des " ça marche pas ou ça marche plus", je suis passé à la rédaction de tutos(*) et me suis transformé en VRP du KISS et du DIY. ;)
(formules, TCD, PowerQuery etc)
Mes collègues furent alors tout content de faire par eux-mêmes et moi j'étais plus tranquille et j'avais plus de temps pour développer mes propres outils.
;)
 

Dudu2

XLDnaute Barbatruc
C'est ce que je m'escrime à dire à une personne pour qui j'ai fait un truc monstrueux (parce que les fonctionnalités demandées étaient monstrueuses). Des mois de dev pour la sortir de semaines de manips manuelles avec quelques clics.
"Documente ce que tu fais pour que tu puisses laisser les autres se débrouiller"
Écrire ce qu'on fait et faire ce qu'on écrit. C'est pas ça le slogan de la Qualité ?
 

Dudu2

XLDnaute Barbatruc
Je suis complètement happy ;).

Je ne déclare plus les API pour VBA6 et j'utilise donc simplement du LongPtr pour tous mes Handles (et contextes) et je renvoie l'utilisateur/développeur à ceci:
Code:
'-------------------------------------------------------------------------------------------------------
'API declarations. For Office 2007 and below remove PtrSafe and remplace LongPtr by Long in all the code
'Reference: https://www.cadsharp.com/docs/Win32API_PtrSafe.txt
'-------------------------------------------------------------------------------------------------------

Et je pique toutes mes déclarations dans cette page:
 
Dernière édition:

dysorthographie

XLDnaute Accro
Bonjour,

De la main droite j’a pris le fichier WIN32API.TXT ;

De la main gauche le fichier Win32API_PtrSafe.txt ;

J’ai placé le tout délicatement dans un mixeur ;

J’ai prononcé les paroles magiques :

« À abracadabra » !

Et Saperlipopette voila ce qui en est sortie !
 

Pièces jointes

  • Winapi.xlsx
    489.4 KB · Affichages: 10

dysorthographie

XLDnaute Accro
Il va juste décompresser le fichier mais je peux te le donner !

mais le fichier Win32API.XLSX est plus convivial il fait un synthèse des 2 fichiers Win32API et tu peux filtrer!
tu peux même rajouter une colonne qui fixe le contexte d'utilisation!
 

Pièces jointes

  • Winapi.zip
    286.4 KB · Affichages: 13
Dernière édition:

Discussions similaires

  • Résolu(e)
Microsoft 365 32 ou 64 bits
Réponses
46
Affichages
2 K

Statistiques des forums

Discussions
315 093
Messages
2 116 125
Membres
112 666
dernier inscrit
Coco0505