l56 Posté(e) le 22 février 2007 Posté(e) le 22 février 2007 Bonjour, Est-il possible, à patrir d'un lisp, d'éxecuter un fichier se trouvant sur le net. un truc du genre :(commandelisp "http://www....../...../toto.exe") toto.exe étant, par exemple, un fichier zip auto-extractible. Merci
Patrick_35 Posté(e) le 22 février 2007 Posté(e) le 22 février 2007 Salut La réponse est OUI La solution (setq shell (vlax-create-object "Shell.Application")) (vlax-invoke shell 'open "http://un_lien_a_telecharger.zip") (vlax-release-object shell) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
l56 Posté(e) le 22 février 2007 Auteur Posté(e) le 22 février 2007 Merci pour ta réponse.effectivement ça marche! mais... Bah oui, y'a toujours un "mais". Comment faire pour que l 'internet explorer ne s'ouvre pas ET pour que je puisse choisir à la place de l'utilisateur le fait de 'executer" "enregistrer" ou "annuler" ? a+ [Edité le 22/2/2007 par l56]
Patrick_35 Posté(e) le 22 février 2007 Posté(e) le 22 février 2007 Hummm... pas facile. J'ai même recherché avec ie, mais c'est le même résultat (setq ie (vlax-Create-Object "InternetExplorer.Application")) (vlax-invoke ie 'navigate "un_lien_a_telecharger.zip") (vlax-release-object ie) Je pensais aussi utiliser WScript.Shell pour faire un copier, mais que nenni :casstet: Il reste la solution du SendKey, mais ce n'est pas terrible à mon gout. Je continue de chercher.... @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
l56 Posté(e) le 22 février 2007 Auteur Posté(e) le 22 février 2007 Merci de te pencher sur mon pb. C'est sympa. Effectivement, sendkey n'est pas très élégant.Mais c'est une idée interessante. et c'est surtout un truc que je viens de découvrir ! Merci a toi bye
Patrick_35 Posté(e) le 26 février 2007 Posté(e) le 26 février 2007 Voila, j'ai trouve la solution grace à TheSwamp (defun telecharger(lien rep / cp ok tmp util) (setq util (vla-get-Utility (vla-get-ActiveDocument (vlax-get-acad-object)))) (if (eq (vla-isurl util lien) :vlax-true) (if (vl-catch-all-error-p (vl-catch-all-apply 'vla-GetRemoteFile (list util lien 'tmp :vlax-true))) (princ "\nErreur lors du téléchargement.") (progn (setq cp (strcat rep (vl-filename-base lien) (vl-filename-extension lien))) (if (findfile cp) (vl-file-delete cp) ) (if (vl-catch-all-error-p (vl-catch-all-apply 'vl-file-copy (list tmp cp))) (progn (princ "\nImpossible de déplacer le fichier \"" (strcat (vl-filename-base cp)(vl-filename-extension cp)) "\" depuis le répertoire \n\"" tmp ) (vl-file-delete tmp) ) (progn (vl-file-delete tmp) (if (zerop (vl-file-size cp)) (progn (vl-file-delete cp) (princ "\nImpossible de télécharger le fichier.") ) (setq ok T) ) ) ) ) ) (princ "\nLe lien n'est pas valide.") ) ok ) Exemple(if (telecharger "un_lien_a_telecharger.zip" "c:\\") (alert "Cela s'est bien passé") (alert "Il y a eu un problème") ) @+ [Edité le 26/2/2007 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
Patrick_35 Posté(e) le 1 mars 2007 Posté(e) le 1 mars 2007 Une autre méthode de faire avec une meilleure gestion des erreurs. (defun download (url dir / byte fic file fso http ok tbl tst) (setq http (vlax-create-object "MSXML2.XMLHTTP") fso (vlax-create-object "Scripting.FileSystemObject") cmd (getvar "cmdecho")) (vlax-invoke-method http 'open "get" url :vlax-false) (if (vl-catch-all-error-p (vl-catch-all-apply 'vlax-invoke (list http 'send))) (princ (strcat "\nLe lien " url " n'est pas valide.")) (if (eq (vlax-get http 'status) 200) (progn (princ "\nTéléchargement en cours...")(princ) (while (not (eq (vlax-get http 'readystate) 4))) (setq file (strcat dir (vl-filename-base url) (vl-filename-extension url)) tbl (vlax-safearray->list (vlax-variant-value (vlax-get-property http 'responsebody)))) (if (vl-catch-all-error-p (setq fic (vl-catch-all-apply 'vlax-invoke (list fso 'createtextfile file)))) (princ (strcat "\nImpossible de créer le fichier " file)) (if (setq tst (findfile file)) (if (< (length tbl) (vlax-get (vlax-invoke fso 'getdrive (substr tst 1 1)) 'freespace)) (progn (foreach byte tbl (vlax-invoke fic 'write (vl-list->string (list byte))) ) (setq ok T) ) (princ (strcat "\nPlus de place sur le disque " (substr tst 1 1))) ) (princ (strcat "\nImpossible de créer le fichier " file)) ) ) (if (not (vl-catch-all-error-p fic)) (progn (vlax-invoke fic 'close) (if (not ok) (vlax-invoke fso 'deletefile file) ) ) ) ) (if (eq (vlax-get http 'status) 404) (princ "Fichier introuvable...Erreur 404.") (princ (strcat "\n" (vlax-get http 'statustext) "...Erreur " (itoa (vlax-get http 'status)) ".")) ) ) ) (vlax-release-object http) (vlax-release-object fso) ok ) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
l56 Posté(e) le 1 mars 2007 Auteur Posté(e) le 1 mars 2007 Effectivement, il y a plus de verifs.Mais il s'assure de l'existence du fichier à télécharger en le téléchargeant.Ce qui est tres ennuyeux si le fichier est lourd. (vl-catch-all-apply 'vlax-invoke (list http 'send)) J'aimerai verifier s'il le fichier existe, et s'il existe proposer le téléchargement, or avec la methode utilisé la vérification de l'existance du fichier est trop longue. Il faudrait une fonction du type (findfile ...) Qu'en penses-tu ? [Edité le 1/3/2007 par l56]
Patrick_35 Posté(e) le 1 mars 2007 Posté(e) le 1 mars 2007 Ce qui est tres ennuyeux si le fichier est lourd. Tout à fait d'accord, mais dans ce cas, utilise la boite de dialogue pour voir l'état du téléchargement, car en cas de gros fichier, on a l'impression qu'autocad est "planté" Il faudrait une fonction du type (findfile ...) Ou plus simplement l'interroger pour connaitre sa taille. Je sais que des logiciels de téléchargement le font, donc cela doit pouvoir se trouver. Et en réflechissant, je suis ennuyé avec cette boucle car elle ne finit pas (ou c'est l'impression qu'elle donne)(while (not (eq (vlax-get http 'readystate) 4)))Le 4 signifie que le téléchargement est terminé.Il va falloir que j'y réflechisse un peu plus en profondeur @+ [Edité le 1/3/2007 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
Patrick_35 Posté(e) le 2 mars 2007 Posté(e) le 2 mars 2007 Ca s'améliore, ça s'améliore (defun download (url dir / byte fic file fso http ok tbl taille) (setq http (vlax-create-object "MSXML2.XMLHTTP") fso (vlax-create-object "Scripting.FileSystemObject") file (strcat dir (vl-filename-base url) (vl-filename-extension url))) (vlax-invoke-method http 'open "get" url :vlax-false) (if (vl-catch-all-error-p (vl-catch-all-apply 'vlax-invoke (list http 'send))) (princ (strcat "\nLe lien " url " n'est pas valide.")) (if (eq (vlax-get http 'status) 200) (if (vl-catch-all-error-p (setq taille (vl-catch-all-apply 'vlax-invoke (list http 'getResponseHeader "Content-Length")))) (princ "\nErreur de lecture sur la taille du fichier.") (if (< (atoi taille) (vlax-get (vlax-invoke fso 'getdrive (substr (vlax-invoke fso 'getabsolutepathname file) 1 1)) 'freespace)) (progn (princ "\nTéléchargement en cours...")(princ) (while (not (eq (vlax-get http 'readystate) 4)) (vla-eval (vlax-get-acad-object) "DoEvents") ) (setq tbl (vlax-safearray->list (vlax-variant-value (vlax-get-property http 'responsebody)))) (if (vl-catch-all-error-p (setq fic (vl-catch-all-apply 'vlax-invoke (list fso 'createtextfile file)))) (princ (strcat "\nImpossible de créer le fichier " file)) (progn (foreach byte tbl (vlax-invoke fic 'write (vl-list->string (list byte))) ) (vlax-invoke fic 'close) (setq ok T) ) ) ) ) ) (princ (strcat "\n" (vlax-get http 'statustext) "...Erreur " (itoa (vlax-get http 'status)) ".")) ) ) (vlax-release-object http) (vlax-release-object fso) ok ) Il me reste plus qu'à trouver le moyen d'afficher la boite de téléchargement pour que cela soit parfait @+ [Edité le 2/3/2007 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
l56 Posté(e) le 17 mars 2007 Auteur Posté(e) le 17 mars 2007 J'ai mis un peu de temps a te répondre car j'était absent. Je viens de tester ton code, il est parfait.La boite de dialoque pour afficher une barre de progression serait effectivement bien venu mais pour des tous petits fichiers, on peut s'en passer. Merci encorebye
l56 Posté(e) le 1 mai 2007 Auteur Posté(e) le 1 mai 2007 Salut, Bon maintenant que je sais le faire dans un sens, comment peut-on faire l'inverse ?Son mon disque dur, j'ai un fichier, fic.txt par exemple, et j'aimerai pouvour l'envoyer de maniere transparente dans un dossier de mon site. c:\dossier\fic.txt vers www.monsite/dossier tout cela à partir d'autocad, bien sur. Patrick_35, je m'en remet à toi car la com. entre autocad et le web, c'est un mystere. A+
Patrick_35 Posté(e) le 1 mai 2007 Posté(e) le 1 mai 2007 SalutUn mystère, grand dieu non. Je me contente de traduire d'un langage à un autre ;) Tu as toutes les explications ici par exemple après une recherche rapide sur le net. Le tout est de trouver l'activex MSXML2.XMLHTTPDonc à la lecture du lien ci-dessus, on devrait faire logiquement(vlax-invoke-method http 'open "post" url :vlax-false) J'ai juste remplacé par rapport au lisp précedent le get par post Sinon, tu as aussi plus simplement (vla-putremotefile (vla-get-utility (vlax-get-acad-object)) Url Mon_Fichier.exemple) ps : c'est du non-testé @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
l56 Posté(e) le 2 mai 2007 Auteur Posté(e) le 2 mai 2007 (vlax-invoke-method http 'open "post" url :vlax-false)Remplacer "get" par "post" ne doit pas etre suffisantj'avance dans le noir, mais n'y aurai-t-il pas quelque chose à changer dans le code ci-dessous ? (vl-catch-all-apply 'vlax-invoke (list http 'send))ou ailleurs... Quand à (vla-putremotefile (vla-get-utility (vlax-get-acad-object)) Url Mon_Fichier.exemple)Quoi que j'essaie, Il renvoi: Le serveur ActiveX a renvoyé l'erreur: nom inconnu: Utility Si tu as le temps, merci de t'interesser au problème.a+
Patrick_35 Posté(e) le 2 mai 2007 Posté(e) le 2 mai 2007 Salut(setq file (findfile "Un_lisp.lsp") url "http://mon_adresse/Lisp/Un_Lisp.lsp" ) Ca devrait fonctionner maintenant car je n'avais pas donné la bonne classe objet :red:(vla-putremotefile (vla-get-utility (vla-get-activedocument (vlax-get-acad-object))) url file)) Je ne peux pas tester en upload et donc t'en dire d'avantage sur MSXML2.XMLHTTP ou Microsoft.XMLHTTP ps : c'est du java. Peut-être que notre cher webmaster pourrait éclairer notre lanterne ? ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
Morgul Posté(e) le 2 mai 2007 Posté(e) le 2 mai 2007 Bonjour à vous, Est-ce que cela veut dire que nous pourrions exécuter des lisp via le net ? Il n'y a pas d'homme cultivé, il n'y a que des hommes qui se cultivent. Maréchal Foch
l56 Posté(e) le 3 mai 2007 Auteur Posté(e) le 3 mai 2007 Pour Morgul, Je ne sais pas si on peut executer des LISP qui se trouveraient dans un dossier d'un site,mais tu peux le ramaner sur ton disque dur puis le charger ... Sinon patrick, AutoCAD me renvoi ; erreur: Erreur Automation Inet: HTTP_STATUS_BAD_METHOD 405 - la méthode n'est pas autorisée C'est peut etre normal, car quand j'utilise lecchFTP pour faire un déplacement du fichier de mon ordi vers le site, j'ai entré avant des codes d'acces. (URL, Nom d'utilisateur et mot de passe)Comment puis-je les rentrer en LISP ?
Patrick_35 Posté(e) le 3 mai 2007 Posté(e) le 3 mai 2007 SalutIl va falloir faire une recherche car il faut surement donner quelque part un mot de passe avec un login.Je n'ai pas trop le temps en ce moment, mais dès que j'ai l'occasion, je pense à toi @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
l56 Posté(e) le 11 juillet 2007 Auteur Posté(e) le 11 juillet 2007 Salut Patrick_, De mon coté, je n'ai rien trouvé. Et toi, as tu un peu de temps ... a+
Patrick_35 Posté(e) le 12 juillet 2007 Posté(e) le 12 juillet 2007 Oups... :red: C'est un sujet qui m'est complètement sortie de la tête.Je fais un noeud à mon mouchoir ;) @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
l56 Posté(e) le 5 octobre 2007 Auteur Posté(e) le 5 octobre 2007 Salut Patrick, Et ton mouchoir ... toujours noué ? ;)
Patrick_35 Posté(e) le 12 octobre 2007 Posté(e) le 12 octobre 2007 heu, ouiEt depuis le temps qu'il est passé à la machine à laver, pas facile à défaire ;) Plus sérieusement, j'ai recherché mais pas trouvé. J'ai trouvé plusieurs syntaxe par le biais du java via activex, mais rien de concluantJe séche pour l'instant :( @+ Les Lisps de PatrickLe but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.Joseph Joubert, 1754-1824
l56 Posté(e) le 19 octobre 2007 Auteur Posté(e) le 19 octobre 2007 Salut Patrick_35, (setq tbl (vlax-safearray->list (vlax-variant-value (vlax-get-property http 'responsebody))))(if (vl-catch-all-error-p (setq fic (vl-catch-all-apply 'vlax-invoke (list fso 'createtextfile file)))).... Ce code ci-dessus est extrait de la routine que tu a fait (voir réponse n°10 ce ce fil),Ce qui m'étonne, c'est qu'il fonctionne tres bien sauf sur la version 2008.La liste tbl contient des valeurs superieur à 256. C'est étrange, je ne comprend pas pourquoi.Si tu as une minute ... Par avance merci.Bon WEL56
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