Aviglémy Posté(e) le 6 mars 2015 Posté(e) le 6 mars 2015 Bonjour,je viens de trouver une solution pour récupérer un chemin UNC d'un lecteur mappé.Il faut changer la lettre de lettre-mappe.J'utilise net use, pour avoir le chemin et récupère la ligne dans la variable chem1-unc. J'aimerais avoir votre avis, et comment clarifier le code. (defun netuse ( / TempReturn) (setq lettre-mappe "c") (command "_.shell" (strcat "net use "(strcase lettre-mappe)": >%temp%\\rapport1.txt")) (setq chem_temp (vl-filename-directory (VL-FILENAME-MKTEMP "vide.txt"))) (setq TempReturn (open (strcat chem_temp "\\rapport1.txt") "r") ligne1 (str2lst (read-line TempReturn) " ") ligne2 (str2lst (read-line TempReturn) " ") chem1-unc (last ligne2) ) ) (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) )
vincentp010 Posté(e) le 6 mars 2015 Posté(e) le 6 mars 2015 Salut, Il y a plus simple pour avoir le dossier temporaire sans créer de fichier vide(setq chem_temp (getenv "temp")) Et ne pas oublier de fermer le fichier ouvert à la fin(close TempReturn) Aide au téléchargement du cadastre dgfip-download-helper Insertion de photos géolocalisées exif https://www.dropbox.com/s/gkf6o9ac2hxen97/exifscr.zip?dl=0 Script correction BUG SPDC V2, propriétaire département 21 et 22 : https://greasyfork.org/scripts/442400-spdcv2/code/SPDCV2.user.js
Aviglémy Posté(e) le 6 mars 2015 Auteur Posté(e) le 6 mars 2015 Re,merci vincentp010,voici une autre version avec des modifs qui me semble importantes. ;;; Routine pour récupérer le nom UNC d'un lecteur mappé. ;;; Aviglémy ; mars 2015 ;;; ;;; entrer (netuse VARIABLE) ;;; VARIABLE doit être un string ;;; ;;; Retourne chem1-unc ;;; ;;; Exemple : ;;; (setq lettre "f") ; lettre mappé dans windows ;;; (netuse lettre) ;;; chem1-unc : "\\\\serveur\\nom_repertoire_partagé" (defun netuse (lettre-mappe / TempReturn) (setq chem_temp (getenv "temp")) (command "_.shell" (strcat "net use "(strcase lettre-mappe)": >%temp%\\netuse-unc.txt")) (while (appli "cmd.exe")) ;; mise en attente du retour de cmd (setq TempReturn (open (strcat chem_temp "\\netuse-unc.txt") "r") ligne1 (str2lst (read-line TempReturn) " ") ligne2 (str2lst (read-line TempReturn) " ") chem1-unc (last ligne2) ) (close TempReturn) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; Routine de (Gile) ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun str2lst (str sep / pos) (if (setq pos (vl-string-search sep str)) (cons (substr str 1 pos) (str2lst (substr str (+ (strlen sep) pos 1)) sep) ) (list str) ) ) ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;; Routine de Patrick_35 pour vérifier que le shell est en fonction ;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (defun appli (qui / apps item lst meth1 meth2 WMI) (vl-load-com) (setq WMI (vlax-create-object "WbemScripting.SWbemLocator") meth1 (vlax-invoke WMI 'ConnectServer nil nil nil nil nil nil nil nil) meth2 (vlax-invoke meth1 'ExecQuery "Select * from Win32_Process") ) (vlax-for item meth2 (setq lst (cons (vlax-get item 'CommandLine) lst)) ) (foreach item (list WMI meth1 meth2) (vlax-release-object item) ) (vl-remove-if-not '(lambda (x) (and x (vl-string-search (strcase qui) (strcase x) ) ) ) lst ) )
GEGEMATIC Posté(e) le 6 mars 2015 Posté(e) le 6 mars 2015 salut,regarde si cela peut t'aider: (setq ObjWsh (vlax-create-object "Scripting.FileSystemObject")) (setq ObjFile (vlax-invoke-method ObjWsh 'GetFile (findfile "acad.lsp"))) (vlax-get-property (vlax-get-property (vlax-get-property objfile 'parentFolder) 'drive) 'ShareName) j'arrive à obtenir la racine UNC:"\\\\serveur\\e"ça me parait plus "propre" comme methode maintenant, j'étais plutôt partit sur shell32.dll, que j'arrive à implémenter, mais que je n'arrive pas à instancier.car là il y aurait tout ce qu'on peut faire avec le shell, je pense.a+Gégé ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
Patrick_35 Posté(e) le 6 mars 2015 Posté(e) le 6 mars 2015 (modifié) Salut Et avec ceci ? (setq fso (vlax-create-object "Scripting.FileSystemObject")) (vlax-for drv (vlax-get fso 'drives) (terpri) (vlax-dump-object drv) ) Et encore(vlax-get (vlax-get-property (vlax-get fso 'drives) 'item "F:") 'ShareName) @+ Modifié le 6 mars 2015 par Patrick_35 Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
GEGEMATIC Posté(e) le 6 mars 2015 Posté(e) le 6 mars 2015 en fait, je m'éloigne un peu du sujet, mais je faisais fausse route avec shell32,la fenêtre dos c'est plutot cmd.exe (ou avais-je la tête ?)mais du coup c'est quand même intéressant de manipuler l'explorateur windows: ;;§/files/test pour utiliser shell32 (l'explorateur)/none (defun c:Shelltest ( / shell shs sh ) (vl-load-com) (setq shell (vlax-create-object "Shell.Application")) (if (not shm-help) (if (not (vlax-import-type-library :tlb-filename (findfile "C:\\WINDOWS\\system32\\shell32.dll") :methods-prefix "shm-" :properties-prefix "shp-" :constants-prefix "shc-" ) ) (progn (alert "Cannot find \"shell32.dll\"") (exit)) ) ) ;;ouvre une fenêtre de l'eplorateur sur C:\\ (shm-open shell "c:\\") ;;les fenetres (setq shs (shm-windows shell)) ;;la fenetre (setq sh (vla-item shs 0)) (vlax-dump-object sh T) (vlax-release-object sh) ;;ferme l'objet shell (vlax-release-object shell) ) ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
Aviglémy Posté(e) le 6 mars 2015 Auteur Posté(e) le 6 mars 2015 Hello,Merci Patrick !j'aime beaucoup :(setq fso (vlax-create-object "Scripting.FileSystemObject")) (vlax-get (vlax-get-property (vlax-get fso 'drives) 'item "F:") 'ShareName) Je le garde et l'ajoute à ma routine. Gégé, tu pars dans des contrées où je n'arrive pas à te suivre, mais très intéresant ton code, en fait j'essai de décoder ... :)
Messages recommandés
Créer un compte ou se connecter pour commenter
Vous devez être membre afin de pouvoir déposer un commentaire
Créer un compte
Créez un compte sur notre communauté. C’est facile !
Créer un nouveau compteSe connecter
Vous avez déjà un compte ? Connectez-vous ici.
Connectez-vous maintenant