Fraid Posté(e) le 1 février 2021 Posté(e) le 1 février 2021 (modifié) Bonjour, Si vous exécutez des scripts en .bat depuis un lisp,une vilaine fenêtre noire apparais aussi vite qu'elle disparais. Et bien, c'est finis. Je l'ai eu. (defun runscr (file / obj ret) (setq ret "Exécution terminée") (if (findfile file) ;si le fichier est bien présent (if (vl-catch-all-error-p ;si plantation (vl-catch-all-apply 'vlax-invoke-method (list (setq obj (vlax-get-or-create-object "WScript.Shell")) "Run" file 0 ;c'est ici que la console la ferme :vlax-true ) ) ) (setq ret "Fichier invalide") (vlax-release-object obj) ) (setq ret "Fichier introuvable") ) ret ) L'argument file est le chemin complet du .bat ex: "c:/MonDossier/MonFichier.bat"Répond un stringquasiment implantable.s'utilise à la place de la fonction (startapp file) ou (command "_.shell" file)en fait j'utilise cette fonction depuis longtemps, mais pas pour des .bat.l'idée m'est venu d'un coupje partage, car cela a été une bonne prise de tête pour certain. Modifié le 8 février 2021 par Fraid https://github.com/Fraiddd
GEGEMATIC Posté(e) le 2 février 2021 Posté(e) le 2 février 2021 Fraid,merci pour le partage,mais,elle est pas vilaine, cette fenêtre, elle est "vintage" !a+gégé ----------------------------------------------------------------------Site: https://www.g-eaux.frBlog: http://g-eaux.over-blog.com
SF.Designer Posté(e) le 2 février 2021 Posté(e) le 2 février 2021 Merci beaucoup pour l'astuce. Si tu ou quelqu'un sait comment faire un afficher une fenêtre d'attente le temps que le .bat finisse sont travail, alors la ce serais le graal !
Fraid Posté(e) le 2 février 2021 Auteur Posté(e) le 2 février 2021 le temps que le .bat finisse sont travail le problème est quel travail.l’idéal est que le .bat retourne un fichier texte, la, c'est facile à détecter.car détecté sa fermeture, est plus compliqué mais faisable en établissant la liste des process en cours avec WMI par exemple.c'est une exploration que Patrick35 nous à partagé.mais je ne retrouve pas le post. elle est pas vilaine, cette fenêtre, elle est "vintage" ! C'est vrais, quand je lance un .bat en dehors d'Autocad, cela ne me gène pas du tout.Par contre quand tu l'appel dans une boucle lisp, la, c'est vraiment désagréable. https://github.com/Fraiddd
SF.Designer Posté(e) le 2 février 2021 Posté(e) le 2 février 2021 J'ai une "moulinette" qui me crée les fichiers PLT ou PDF. Du coup pendant le temps de création je voie défilé sur la fenêtre DOS, toute la procédure. EN PJ Exemple d'un de mes BAT et SCR ... (J'en ai des dixaines) Du coup si je pouvais avoir une simple fenêtre style "La création des fichiers est en cours" ....BatchPrint.zip
Fraid Posté(e) le 2 février 2021 Auteur Posté(e) le 2 février 2021 avoir une simple fenêtreÀ la base, je souhaitais éliminer une fenêtrec'est pas pour en mettre une autre...je te propose plutôt un message qui apparait simplement dans l'invite de commande d'Autocad. (defun sf-imp-run (file / obj lprocs scrproc) (setq lprocs (p35-appli));liste des process en cours (princ "\nScript en cours d'exécution...") (if (findfile file) (if (vl-catch-all-error-p (vl-catch-all-apply 'vlax-invoke-method (list (setq obj (vlax-get-or-create-object "WScript.Shell")) "Run" file 0 :vlax-true ) ) ) (princ "\nFichier invalide") (progn (vlax-release-object obj) (foreach proc (p35-appli) (if (not (member proc lprocs))(setq scrproc proc));détermine le process en comparant ceux du debut et pendant ) (while (member scrproc (p35-appli));tant que le process est actif on attend (command "_.delay" 200) ) (princ "\nExécution du script terminée.") ) ) (princ "\nFichier introuvable") ) (princ) ) (defun p35-appli(/ apps lst meth1 meth2 WMI) (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 nil lst) ) cela n'a d’intérêt que si effectivement cela prend du temps.sinon on en perd.... 1 https://github.com/Fraiddd
SF.Designer Posté(e) le 3 février 2021 Posté(e) le 3 février 2021 Ca c'est sympa déjà, ca me plais, pour des petit bat rapide. Mais si on change de fichiers DWG, on ne voit plus l'information. En gros quand on fait tourner la création des fichier PLT, cela peut prendre des heures et pendant ce temps je voie cela en dehors d'autocad (PJ), et ca défile pour chaque fichier créé. Je cherche depuis un bon moment comment remplacer cette fenêtre par une petite comme expliqué sur mon post précédent.
SF.Designer Posté(e) le 3 février 2021 Posté(e) le 3 février 2021 Ou peux être remplacer les détails de chaque fois qu'il lance un script, par un carré noir dans l'invité de commande, comme le font certaines installations silencieuses.
Fraid Posté(e) le 3 février 2021 Auteur Posté(e) le 3 février 2021 Yop Afficher une fenêtre sans bouton ok, qui s’éteint à la fermeture d'une appli. externece n'est pas si facile en fait.en DCL, si il n'y a pas de bouton, il est déclaré invalide.avec le popup d'un objet WScript pas moyen non plusj'ai regardé dans le dos_lib, non plus.j'envisage donc, soit de changer de point de vue etde lancer les scripts à travers une boite de dialogue banal qui disparaîtrait qu'une fois le process clos.ou en affichant une petite page html et la clore une fois le process clos (la, c'est une petite exploration...) c'est parti vers l'inconnu et au delà.... 1 https://github.com/Fraiddd
Fraid Posté(e) le 8 février 2021 Auteur Posté(e) le 8 février 2021 Si tu ou quelqu'un sait comment faire un afficher une fenêtre d'attente le temps que le .bat finisse sont travail, alors la ce serais le graal ! une première solution avec un DCL qui utilise la fonction runscr (au début du post) le DCL à enregistrer sous run.dcl run :dialog { label = "RUN Exécution d'un Script"; :text { key = "T1"; alignment = centered; } :image { key = "img"; width = 14.5; height = 7; } spacer; ok_cancel; } le lanceur (defun c:run ( / id fil file x y msg) (setq file (getfiled "Choisir un fichier" "c:\\" "" 4) fil (strcat (vl-filename-base file) (vl-filename-extension file)) id (load_dialog "run.dcl") msg "Abandon" ) (if (new_dialog "run" id) (progn (setq x (dimx_tile "img") y (dimy_tile "img"));width et height du dcl (set_tile "T1" (strcat "Voulez vous Exécuter " fil " ?")) (start_image "img") (fill_image 0 0 x y -15);fond (slide_image 6 0 x y "bat");6 pour centrer (end_image) (action_tile "accept" "(set_tile \"T1\" (strcat \"Exécution de \" fil \" en cours ...\")) (setq msg (runscr file)) (done_dialog 1) " ) (action_tile "cancel" "(done_dialog 0)") (start_dialog) (unload_dialog id) ) ) (princ (strcat "\n" msg)) (princ) ) il faut télécharger et placer bat.sld à coté du lisp La boite de dialogue se ferme quand le script est terminé.pas moyen de mettre une animation, tout se bloque pendant l’exécution d'un .bat.bat.zip https://github.com/Fraiddd
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