Bonjour, je voulais savoir si le problème déjà exposé dans la discussion :
[WD23] DnD Exploreur - évènement ne se déclenche pas - WinDev (developpez.net)
A été réglé ou pas, il s’agit selon ce que je vois d’un bug dans le fonctionnement du Drag & Drop lié aux privilèges élevé d’une application (ce qui est étonnant vu que généralement les bugs surviennent lorsque les privilèges sont faibles)
Mon code est simple il s’agit d’activer le DnD pour la fenêtre, et lier la procédure locale qui déterminera l’action à faire en cas de DnD (dans mon cas récupérer le chemin du fichier glissé)
Code :
Constats :
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 PROCÉDURE MaFenêtre() CONSTANTE WM_DROPFILES=563 FIN ExplorerAccepte(Vrai,FEN_Menu) //Activation du Drag & Drop pour la fenetre en entier avec tout les champs Evénement("RecupFichiers_DND_Windows","*.*",WM_DROPFILES) // Liaison de la procedure RecupFichiers_DND_Windows avec le DnD PROCÉDURE RecupFichiers_DND_Windows() // Nombre de fichiers posés dans l'application par Drag and Drop nbFic est un entier = ExplorerRécupère(_EVE.wParam) sNomFic est une chaine SI nbFic = 1 ALORS sNomFic = ExplorerRécupère(_EVE.wParam,1) SAI_Chemin = sNomFic FIN
Le code fonctionne bien et le résultat attendu est là, Mais…
si l’exécutable est démarré avec privilèges administrateur la fonction DnD est comme désactivée, il ne se passe plus rien.
Et dans mon projet c’est obligatoire d’avoir des privilèges élevés vu qu’il s’agit de régler des erreurs et qu’il devra avoir accès au registre Windows etc.
J’ai donc voulu voir si cette erreur est reproductible dans le projet Exemple livré avec WinDev :
Exemples complets (WINDEV) : WD Zip
Cet exemple illustre l'utilisation des fonctions WLangage d'archivage avec compression.
Et donc là aussi lorsqu’on exécute le programme en tant qu’administrateur le DnD ne marche pas.
Ma solution temporaire :
Détacher cette fenêtre de mon projet et produire un exécutable sans privilèges administrateur pour qu’il fasse le job et renvoi le résultat dans un fichier externe que mon programme initial devra utiliser pour récupérer le résultat !!
Ma solution je ne l’aime pas trop est me parait du bricolage malheureusement, car l’application qui devra faire le DnD doit être démarrée manuellement sans l’appel depuis l’application qui a déjà des privilèges élevés sinon elle aussi est automatiquement démarrée avec des privilèges élevés et ça plante tout le fonctionnement DnD.
Donc voilà, si quelqu’un peut m’orienter vers la méthode pour contourner ce bug ça sera super.
Partager