Aller au contenu

Install.exe depuis un lisp


Messages recommandés

Posté(e)

Bonjour !!

 

J'uilise des lisps et des menus contenant les boutons qui lancent ces lisps.

 

Un utilisateur qui souhaite utiliser mon programme doit :

- d'abord faire Outis > Autolisp > charger > Contenu > Ajouter pour charger le lisp,

- puis, il doit faire Outils > Options > Fichiers > Chemins de recherche de fichiers de support > Ajouter > Parcourir pour rendre accessibles le répertoire des icônes,

- Enfin, il doit faire Outils > Personnaliser > Menus... > Parcourir > Charger pour charger la barre d'outils

 

Existe-t'il un moyen simple de créer un exécutable d'installation qui fasse tout ça à la place de l'utilisateur ? J'ai vu que les lisps chargés au démarrage et les chemins de recherche de fichiers de support sont des entrées dans la base de registe mais je ne souhaite pas trop y triturer.

 

Quand est-il de la désinstallation ?

 

Merci d'avance !

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

Salut,

 

Tu peux faire un dossier contenant tes routines LISP, tes icones, tes menus (*.MNS ou *.CUI) et un fichier *.MNL (même nom que le MNS ou CUI) dans lequel tu commande le chargement de tes routines (load "MaRoutine1") (load "MaRoutine2") etc...

 

Il suffit ensuite d'indiquer à AutoCAD le chemin de ce dossier dans les chemin de recherche des fichiers de support et de charger ton MNS avec la commande chargmnu pour un menu partiel.

 

Personnellement, comme je partage les postes que j'utlise avec d'autres, j'utilise des MNS ou CUI qui sont des copies des AutoCAD.mns ou AutoCAD.cui auxquels j'ai rajouté mes outils et je les charge avec la commande menu dans un nouveau profil utilisateur, dans ce cas il faut ajouter au fichier *.MNL (load "acad.mnl") pour avoir les LISP utilisé par les menus originaux.

 

Il y a sûrement d'autres façons de faire, celle-là marche.

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

bonjour,

 

pour ce qui est des chemins de recherche et des menus personnalisés, une solution simple serait de configurer un poste, puis exporter le profil, en le nommant nomdelentreprise.arg et en le sauvegardant sur un lecteur réseau où tout le monde a accès. Il sera facile à chacun de l'importer sur son poste.

Il faudra juste changer dans les propriétés de l'icône autocad, dans la ligne cible, ce qui vient après /p et qui correspond au profil par défaut au lancement d'autocad, pour y mettre "nomdelentreprise" à la place de "Architectural Desktop" (ou autre suivant la version).

 

Mias bon, si chacun a ses petites habitudes, tu auras du mal a imposer un profil unique pour toute ta boîte. Ce serait la meilleure solution, mais bon courage...

 

Pour ce qui est du chargement des lisp, je rajoute le répertoire où ils se trouvent dans les chemins de fichiers de support et je fais faire le load par le bouton du menu.

 

dans le genre

 

^C^C(load "monlisp");monlisp

 

Ok, ça fait charger le lisp à chaque fois qu'on en a besoin, mais c'est pas la mort... et au moins on est sûr que c'est fait.

 

Sinon pour modifier les chemins de recherche de fichier support par lisp

 

(defun c:modsupport ()
 (vl-load-com)
 (setq acadObject (vlax-get-acad-object))
 (setq prefsObject (vlax-get-property acadObject 'Preferences))
 (setq tabnameObject (vlax-get-property prefsObject 'Files))
 ;; la liste des chemins existants
 (setq thePath (vlax-get-property tabnameObject 'SupportPath))
 ;; on y rajoute le chemin qu'on veut avec la commande strcat
 (setq thePath (strcat thePath ";" "C:\\TEMP"))
 ;; on met a jour la liste des chemins
 (vlax-put-property tabnameObject 'SupportPath thePath)
 ;; et le tour est joué
)

 

Pour faire charger des menus par le lisp, je ne sais pas mais ça doit marcher.

 

Amicalement

 

Zebulon_

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

salut

je n'ai pas trouvé le moyen d'indiquer les chemins de recherche de fichiers automatiquement

Chargement des menus automatiquement :

pour une config sur plusieurs postes , sur chaque poste:

je defini une variable d'environnement pour le chemin du serveur :

set serveur = //serveuracad/

je modifie le fichier AutoCAD.lsp:

(defun s::startup()

(if (not (menugroup "applis2005"))

(progn

(setvar "CMDECHO" 0)

;;(command "_.MENULOAD" "men_btrm")

(command "_.MENULOAD" (strcat (getenv"serveuracad")"cfg-aclt2005/support/menuperso"))

(setvar "CMDECHO" 1)

);;progn

);;if

(menucmd "P13=+APPLIS2005.POP1")

(menucmd "P14=+APPLIS2005.POP2")

(menucmd "P15=+APPLIS2005.POP3")

(menucmd "P16=+APPLIS2005.POP4")

(menucmd "P17=+APPLIS2005.POP5")

)

 

appli2005 et le groupe de menu defini dans le fichier menuperso.mns

les menus pop1 à pop5 sont aussi definis dans ce fichier.

ex :

***MENUGROUP=APPLIS2005

***POP1

[&APPLIS1]

ETC...

 

Posté(e)

pour charger des menus

 

(defun c:modmenu ()
 (setq MENUNAME "MOSAI") ;; par exemple
 (vl-load-com)
 (setq acadObject (vlax-get-acad-object))
 (setq thisDoc (vla-get-activeDocument acadobject))
 (setq menus (vla-get-menuGroups acadobject))
 (princ "\nLes menus chargés : ")
 (setq FLAG nil)
 (vlax-for n menus
   (if (= (vla-get-name n) MENUNAME)
     (setq FLAG T)
   )
   (print (vla-get-name n))  ;; la liste des menus chargés
 )
 (if FLAG
   (alert "le menu est déjà chargé")
   (vla-load menus (strcat MENUNAME ".mns"))
 )
 (princ)
)

 

ça charge le menu d'icônes. S'il y a des menus popup, il faut encore rajouter une couche pour les charger. Y-a-t'il des menus popup à charger ?

 

Amicalement

 

Zebulon_

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

avec les popups, ça pourrait donner ça

 

 
(defun c:modmenu ()
 (setq MENUNAME "MOSAI") ;; par exemple
 (vl-load-com)
 (setq acadObject (vlax-get-acad-object))
 (setq thisDoc (vla-get-activeDocument acadobject))
 (setq menus (vla-get-menuGroups acadobject))
 (princ "\nLes menus chargés : ")
 (setq FLAG nil)
 (vlax-for n menus
   (if (= (vla-get-name n) MENUNAME)
     (setq FLAG T)
   )
   (print (vla-get-name n))  ;; la liste des menus chargés
 )
 (if FLAG
   (alert "le menu est déjà chargé")
   (progn
     (vla-load menus (strcat MENUNAME ".mns"))
     (setq currMenuGroup (vla-item menus MENUNAME))
     (setq popup (vla-get-menus currMenugroup))
     (princ "\nLa liste des popups : ")
     (vlax-for n popup
       (print (vla-get-name n))
       (vla-insertinmenubar   ;; ajouter le menu dans la barre de menus
         n 
         (- (vla-get-count (vla-get-menuBar acadObject)) 1)  ;; à l'avant dernière place
       )
     )
   )
 )
 (princ)
)

 

Amicalement

 

Zebulon_

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

Salut

Un exemple de ce que j'avais fait pour le chargement automatique des menus avec leurs barres d'outils

 

Extrait de l'aide

Gmenugroup.nametag A menugroup and name tag.

 

Le titre dans mon menu partiel

***MENUGROUP=MON_MENU_PERSO***
POP1
              [&MENU PERSO]
ID_Premier     [&Premier]^C^C^P(lance_un_lisp)

 

Pour la barre d'outil

***TOOLBARS
**TB_MON_MENU_PERSO
ID_MON_MENU_PERSO [_Toolbar("MENU PERSO", _Top, _Show, 1, 1, 1)]
ID_Bouton_1       [_Button("BOUTON 1", "Bt1.bmp", "Bt1.bmp")]^C^C^P(lance_un_lisp) ^P
                 [--]
ID_Bouton_2       [_Button("BOUTON 2", "Bt2.bmp", "Bt2.bmp")]^C^C^P(lance_un_lisp) ^P

 

Pour charger le menu automatiquement le menu partiel dans un s::statup()

(if (not (menucmd "GMON_MENU_PERSO.ID_Premier=?")) ; ne trouve pas le menu
 (progn
   (command "_.menuload" "mon_menu.mns") ; charger le menu partiel
   (menucmd (strcat "P7=+MON_MENU_PERSO.Pop1")) ; place le menu à la 7éme position
   (command "_.toolbar" "TB_MON_MENU_PERSO" "") ; affiche la barre d'outil
 )
)

 

ps : ce que donne Zebulon_ à l'air exellent, ça reste à creuser

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

salut

 

ps : ce que donne Zebulon_ à l'air exellent, ça reste à creuser

 

comme je suis une bille en vlisp, je me soigne. Pour la pharmacie, je suis allé voir le docteur Kenny Ramage. Sa pharmacopée est intéressante.

 

http://www.afralisp.co.za/index.htm

 

En plus les consultations sont gratuites, on ne creuse même pas le trou abyssal de la sécu.

 

Amicalement

 

Zebulon_

C'est au pied du mur que l'on reconnaît le maçon ! (Anonyme)

C’est en restant au pied du mur qu’on ne voit que le mur (Anonyme aussi)

Posté(e)

comme je suis une bille en vlisp, je me soigne. Pour la pharmacie, je suis allé voir le docteur Kenny Ramage. Sa pharmacopée est intéressante.

 

Ca va venir, ça va venir ;)

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Salut, ca n'est peut-être pas autorisé mais après tout ca leur fera de la pub !

 

Regarde un peu le code du programme PENGUIN :

(il est enregistré en Acaddoc.lsp, suffit de s'en inspirer dans ton acaddoc)

(defun-q penguin::startup ( / loaded)
 ;; test if loaded the Penguin menu:
 (if (null (menuloaded "PENGUIN"))
   (progn
     (setvar "CMDECHO" 0)
     (command "_MENULOAD" "Penguin_acad")
     (setvar "CMDECHO" 1)
   )
 )
 ;; Test if visible:
 (if (menuloaded "PENGUIN")
   (MakeToolbarVisible "PENGUIN" "Penguin")
 )
 (princ)
)

;; Add to the current S::STARTUP:
(if S::STARTUP 
 (setq S::STARTUP (append S::STARTUP (quote ((penguin::startup))))) 
 (defun-q S::STARTUP () (penguin::startup)) 
) 


(defun-q MenuLoaded (menuname / acadapp menuGroups nameMG eachMG exitcode)
  (setq exitcode nil)
  (if (car (atoms-family 1 '("vl-load-com")))
     (vl-load-com)
  )
  (setq acadapp    (vlax-get-acad-object)
          menuGroups (vla-get-menugroups acadapp)
  )
  (vlax-for eachMG menuGroups
     (setq nameMG (vla-get-name eachMG))
     (if (= nameMG menuname)
        (setq exitcode T)
     )
  )
  exitcode
)

 

C'est du Mcneels, voir l'article sur PENGUIN

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)
Posté(e)

Merci à tous.

 

Je n'ai pas eu le temps de trop me pencher sur vos solutions, mais j'ai l'impression qu'il y a toujours des manipulations à faire dans autocad ?

 

Je pensais à un exécutable qui vient ajouter tous seuls les menus, icônes etc, sans qu'autocad soit ouvert.

 

Il faut par exemple qu'au prochain démarrage le lisp de zebulon soit charger en startup, celui-ci donc chargerait ensuite les menus adéquat. Le problème est donc de faire en sorte que le lisp soit charger au prochain démarrage, sans ouvrir autocad.

 

Par exemple, j'avais installé l'utilitaire SUPER PURGE. Celui-ci a détecté mes installations autodesk (autocad 2006 et Autodesk Architectural Desktop 2005*) et à ajouter un menu superpurge à chacune d'entre elle.

 

 

 

* : je déconseille d'ailleurs l'installation en parallèle de AutoCAD 2006 et Autodesk Architectural Desktop 2005. J'ai eu de gros soucis et des pertes de données avec un programme sur Autodesk Architectural Desktop 2005 qui utilisait l'interpréteur de commande de 2006...

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

Salut

 

Dans les exemples qui te sont donnés, tu peux le faire en automatique. Dès que tu lances Autocad, si ton menu n'est pas présent, le chargement sera effectué par exemple

 

@+

Les Lisps de Patrick

Le but n'est pas toujours placé pour être atteint, mais pour servir de point de mire.

Joseph Joubert, 1754-1824

Posté(e)

Alors je n'ai pas suivi à quelle étape on disait à autocad de charger un premier fichier (lisp ou mnu) qui s'occupe ensuite de lancer le reste.

 

Juste après l'installation de mon programme (lisp, mnu, bmp etc), il faut bien dire une première fois à autocad : dorénavent, tu charges ce fichier à chaque démarrage...

Autocad 2021 - Revit 2022 - Windows 10

Posté(e)

Salut,

 

Je ne suis pas sûr de comprendre ce que tu veux faire exactement, mais tu devrais trouver une réponse qui te convient parmi les méthodes proposées dans l'aide d'AutoCAD :

 

Guide de personnalisation

-> Introduction aux interfaces de programmation

-> AutoLISP et Visual LISP

-> Chargement et exécution automatiques des routines AutoLISP

Gilles Chanteau - gileCAD - GitHub
Développements sur mesure pour AutoCAD

Posté(e)

Renseigne-toi sur ACADDOC.lsp et ::startup, ils sont chargés au démarrage et mon message allait dans ce sens.

Bureau d'études dessin.

Spécialiste Escaliers

Développement - Formation

 

./__\.
(.°=°.)

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 compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant
×
×
  • Créer...

Information importante

Nous avons placé des cookies sur votre appareil pour aider à améliorer ce site. Vous pouvez choisir d’ajuster vos paramètres de cookie, sinon nous supposerons que vous êtes d’accord pour continuer. Politique de confidentialité