Jump to content

Add several lisp files to the startup at once


Recommended Posts

Posted
14 minutes ago, Lee Mac said:

What are your reasons for not loading programs using the acaddoc.lsp (which can be easily manipulated programmatically), versus using the Startup Suite (which is difficult to manipulate programmatically)?

Since I'm not good at lisp, I can't judge the complexity of the Startup Suite.  If there is no alternative, I will explore creating acaddoc.lsp, thank you.

Posted
16 minutes ago, Nikon said:

Since I'm not good at lisp, I can't judge the complexity of the Startup Suite.  If there is no alternative, I will explore creating acaddoc.lsp, thank you.

 

Even more reason to give weight to the opinions of those who have more experience in this area ;) 

To the man with a hammer, everything looks like a nail.

  • Like 1
  • Funny 1
  • Agree 1
Posted (edited)
22 minutes ago, Lee Mac said:

Even more reason to give weight to the opinions of those who have more experience in this area

OMEGA-ThundeR apparently coped with the task. But no one commented on his decision...

OMEGA-ThundeR.png

Edited by Nikon
Posted (edited)
20 minutes ago, Lee Mac said:

...or just ignore us :D

There is no ignoring, I just didn't know that "The Startup Suite cannot be automated via LISP". (Lee Mac Posted November 4, 2014)

I just found out about it today.

Hasn't anything changed in Autocad since 2014?😄

Edited by Nikon
Posted

Looking at Omega-Thunder, he used the Registry editor, and not LISP via AutoCAD, you'd need to ask perhaps in a Windows forum how to amend the registry from a text file.

 

The registry is a powerful tool - get it wrong and you might be needing to reinstall your software - so be careful.

 

 

Via LISP the methods you can use are detailed above, remembering of course that LISP via AutoCAD is mostly for manipulating lines on the screen, not for controlling windows, or the workings of your CAD package.

 

 

Might be you have to consider the end result and work out if you can do what you ultimately want another way using the above.

 

 

 

(Note: Adding to Lee Mac, experience in the area, the commentators on this thread... and those who haven't commented but I know read most threads add up to 10s of thousands of posts, many many years of LISPs, and if they are suggesting other solutions then perhaps... perhaps... that is the way to go)

 

 

  • Thanks 1
Posted (edited)

Last attempt 

 

;************************ G L A V C V S *************************
;************************** F E C I T ***************************
(defun c:LoadFolder (/ sh hwd carp slf pth lstAA a arch nmarch nmarchLL cno cns sl r l admin? ttpp acadAdmin? sustCad)
  (defun ttpp (cp / c w)
    (and (vl-file-directory-p cp)
       (setq w (vlax-get-or-create-object "WScript.Shell"))
       (findfile (setq c (strcat (getenv "windir") "\\System32\\icacls.exe ")))
       (vlax-invoke-method
	 w
	 'run
	 (strcat c "\"" cp "\"" " /q /c /t /grant " (cond ((getenv "userdomain")) ((getenv "computername"))) "\\" (getenv "username") ":(OI)(CI)F /T")
	 0
	 :vlax-true
       )
    )
    (and w (vlax-release-object w))
  )
  (defun acadAdmin? (/ arch ruta ruta1 f sh)
    (if	(findfile
	  (setq ruta1 (strcat (getenv "TEMP") "\\acAdmin.si"))
	)
      (vl-file-delete ruta1)
    )
    (if	(setq arch
	       (open (setq ruta (strcat (getenv "TEMP") "\\ea.bat")) "w")
	)
      (progn
	(write-line
	  "@echo off
net session >nul 2>&1
if %errorlevel% == 0 (
  echo SI> \"%temp%\\acAdmin.si\"
)"
	  arch
	)
	(close arch)
	(setq sh (vlax-create-object "WScript.Shell"))
	(vlax-invoke sh 'Run ruta 0 :vlax-true)
	(vlax-release-object sh)
	(vl-file-delete ruta)
	(if (findfile ruta1)
	  (progn
	    (vl-file-delete ruta1)
	    T
	  )
	)
      )
    )
  )
  (defun sustCad (tx a n / c i r)
    (while (/= (setq c (substr tx (setq i (if i (1+ i) 1)) 1)) "")
      (setq r (strcat (if r r "") (if (= c a) n c)))
    )
  )
  (setq sl (getvar "SECURELOAD"))
  (SETVAR "SECURELOAD" 0)
  (if (setq admin? (acadAdmin?)
	    sh (vla-getinterfaceobject (vlax-get-acad-object) "shell.application")
	    hwd (vl-catch-all-apply 'vla-get-hwnd (list (vlax-get-acad-object)))
	    carp (vlax-invoke-method sh 'browseforfolder (if (vl-catch-all-error-p hwd) 0 hwd) "Folder to load" 0 "")
      )
    (if (setq slf (vlax-get-property carp 'self)
	      pth (vlax-get-property slf 'path)
	      pth (vl-string-right-trim "\\" (vl-string-translate "/" "\\" pth))
	)
      (if (setq lstAA (vl-directory-files pth "*.lsp"))
	(foreach a lstAA
	  (if (not arch)
	    (setq arch (open (setq nmarchLL
				    (strcase
				      (strcat
				        (VL-REGISTRY-READ
					  "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"
					  "Personal"
				        )
				        "\\ListaLisps.lsp"
				      )
				    )
			     )
			     "w"
		       )
	    )
	  )
	  (load (strcat (setq cno (strcat pth "\\" a))))
	  (write-line (strcat "(load \"" (sustCad cno "\\" "\\\\") "\")") arch)
	)
      )
    )
    (if (not Admin?)
      (vl-catch-all-apply
        (alert "Acad.exe not have Administrator privileges.\nThis requeriment is necessary to run this command.\n\nExiting...")
        (exit)
      )
    )
  )
  (if arch
    (progn
      (close arch)
      (startapp "notepad" nmarch)
      (princ (strcat "\n*** " (itoa (length lstAA)) " files LOADED ***"))
      (if (not (wcmatch (strcase pth) (setq cns (VLAX-get-property (setq prf (VLAX-get-property (vla-get-preferences (vlax-get-acad-object)) "files")) "SupportPath"))))
	(progn
	  (vlax-put prf "SupportPath" (strcat cns ";" pth))
	  (princ (strcat "\n*** New SupportPath: " pth))
	)
      )
	
      (setq nmarch (if (setq a (findfile "acadDoc.lsp")) a (strcat (vl-filename-directory (findfile "acad.exe")) "\\Support\\acadDoc.lsp"))
	    nmarchLL (strcase (sustCad nmarchLL "\\" "\\\\"))
      )
      (if a
	(if (setq arch (open nmarch "r"))
;;;	  (progn (while (and (not r) (setq l (read-line arch))) (setq r (wcmatch (strcase l)  "(LOAD *LISTALISPS.LSP\")"  ))) (close arch))
	  (progn (while (and (not r) (setq l (read-line arch))) (setq r (wcmatch (strcase l) (strcat "(LOAD \"" nmarchLL "\")") ))) (close arch))
	  (alert (princ (strcat "It was not possible to write to \"acadDoc.lsp\". Open the file yourself and write:   (load \"" nmarchLL "\")")))
	)
      )
      (cond
	((and a (not r))
	  (if (setq arch (open nmarch "a")) (progn (write-line (strcat "(load \"" nmarchLL "\")") arch) (close arch) (alert "\"acadDoc.lsp\" has been successfully modified")))
	)
	(a (vlax-invoke-method (vlax-create-object "wscript.shell") 'popup "\"acadDoc.lsp\" is correct.\nNo modifications were necessary" 0 "Checking \"acadDoc.lsp\"..." 0) )
;;;	(nmarch (if (setq arch (open nmarch "w")) (progn (write-line "(LOAD \"LISTALISPS.LSP\")" arch) (close arch))))
	(nmarch
	  (if (setq arch (open nmarch "w"))
	    (progn (write-line (strcat "(load \"" nmarchLL "\")") arch) (close arch) (alert "\"acadDoc.lsp\" has been successfully modified"))
	    (if (= (vlax-invoke-method (vlax-create-object "wscript.shell") 'popup
		     "It appears that it is not possible to write to the \"Support\" directory.\nWould you like me to try to unlock access permisions?" 0 "Access AutoCAD directory"
		     4
		   )
	           6
	        )
	      (progn
	        (ttpp (vl-filename-directory nmarch))
		(if (setq arch (open nmarch "w"))
		  (progn (write-line (strcat "(load \"" nmarchLL "\")") arch) (close arch) (alert "DONE!!!\n\n\"acadDoc.lsp\" has been successfully modified"))
		  (vlax-invoke-method
		    (vlax-create-object "wscript.shell")
		    'popup
		    "The attempt didn't work.\nYou'll need to troubleshoot the problem manually:\n\nDo the following:\nStart StartSuite, find \"ListaLisps.lsp\" file in \"Documents\" folder and select it to load every time you start it.\n\nThis will resolve the issue"
		    0
		    "Access AutoCAD directory"
		    0
		  )
		)
	      )
	    )

	  )
	)
	(T (alert "Ocurrió lo inesperado"))
      )
      (if arch (startapp "notepad" nmarch))
    )
  )
  (SETVAR "SECURELOAD" sl)
  (princ)
)

 

Edited by GLAVCVS
Posted

Lisp, Lisp, Lisp....
and only Lisp 🙃

Posted
14 minutes ago, GLAVCVS said:

Last attempt 

 


(defun c:LoadFolder (/ sh hwd carp slf pth lstAA a arch nmarch nmarchLL cno cns sl r l admin? ttpp acadAdmin? sustCad)
  (defun ttpp (cp / c w)
    (and (vl-file-directory-p cp)
       (setq w (vlax-get-or-create-object "WScript.Shell"))
       (findfile (setq c (strcat (getenv "windir") "\\System32\\icacls.exe ")))
       (vlax-invoke-method
	 w
	 'run
	 (strcat c "\"" cp "\"" " /q /c /t /grant " (cond ((getenv "userdomain")) ((getenv "computername"))) "\\" (getenv "username") ":(OI)(CI)F /T")
	 0
	 :vlax-true
       )
    )
    (and w (vlax-release-object w))
  )
  (defun acadAdmin? (/ arch ruta ruta1 f sh)
    (if	(findfile
	  (setq ruta1 (strcat (getenv "TEMP") "\\acAdmin.si"))
	)
      (vl-file-delete ruta1)
    )
    (if	(setq arch
	       (open (setq ruta (strcat (getenv "TEMP") "\\ea.bat")) "w")
	)
      (progn
	(write-line
	  "@echo off
net session >nul 2>&1
if %errorlevel% == 0 (
  echo SI> \"%temp%\\acAdmin.si\"
)"
	  arch
	)
	(close arch)
	(setq sh (vlax-create-object "WScript.Shell"))
	(vlax-invoke sh 'Run ruta 0 :vlax-true)
	(vlax-release-object sh)
	(vl-file-delete ruta)
	(if (findfile ruta1)
	  (progn
	    (vl-file-delete ruta1)
	    T
	  )
	)
      )
    )
  )
  (defun sustCad (tx a n / c i r)
    (while (/= (setq c (substr tx (setq i (if i (1+ i) 1)) 1)) "")
      (setq r (strcat (if r r "") (if (= c a) n c)))
    )
  )
  (setq sl (getvar "SECURELOAD"))
  (SETVAR "SECURELOAD" 0)
  (if (setq admin? (acadAdmin?)
	    sh (vla-getinterfaceobject (vlax-get-acad-object) "shell.application")
	    hwd (vl-catch-all-apply 'vla-get-hwnd (list (vlax-get-acad-object)))
	    carp (vlax-invoke-method sh 'browseforfolder (if (vl-catch-all-error-p hwd) 0 hwd) "Folder to load" 0 "")
      )
    (if (setq slf (vlax-get-property carp 'self)
	      pth (vlax-get-property slf 'path)
	      pth (vl-string-right-trim "\\" (vl-string-translate "/" "\\" pth))
	)
      (if (setq lstAA (vl-directory-files pth "*.lsp"))
	(foreach a lstAA
	  (if (not arch)
	    (setq arch (open (setq nmarchLL
				    (strcase
				      (strcat
				        (VL-REGISTRY-READ
					  "HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Explorer\\Shell Folders"
					  "Personal"
				        )
				        "\\ListaLisps.lsp"
				      )
				    )
			     )
			     "w"
		       )
	    )
	  )
	  (load (strcat (setq cno (strcat pth "\\" a))))
	  (write-line (strcat "(load \"" (sustCad cno "\\" "\\\\") "\")") arch)
	)
      )
    )
    (if (not Admin?)
      (vl-catch-all-apply
        (alert "Acad.exe not have Administrator privileges.\nThis requeriment is necessary to run this command.\n\nExiting...")
        (exit)
      )
    )
  )
  (if arch
    (progn
      (close arch)
;;;;;;      (startapp "notepad" nmarch)
      (princ (strcat "\n*** " (itoa (length lstAA)) " files LOADED ***"))
      (if (not (wcmatch (strcase pth) (setq cns (VLAX-get-property (setq prf (VLAX-get-property (vla-get-preferences (vlax-get-acad-object)) "files")) "SupportPath"))))
	(progn
	  (vlax-put prf "SupportPath" (strcat cns ";" pth))
	  (princ (strcat "\n*** New SupportPath: " pth))
	)
      )
	
      (setq nmarch (if (setq a (findfile "acadDoc.lsp")) a (strcat (vl-filename-directory (findfile "acad.exe")) "\\Support\\acadDoc.lsp"))
	    nmarchLL (strcase (sustCad nmarchLL "\\" "\\\\"))
      )
      (if a
	(if (setq arch (open nmarch "r"))
;;;	  (progn (while (and (not r) (setq l (read-line arch))) (setq r (wcmatch (strcase l)  "(LOAD *LISTALISPS.LSP\")"  ))) (close arch))
	  (progn (while (and (not r) (setq l (read-line arch))) (setq r (wcmatch (strcase l) (strcat "(LOAD \"" nmarchLL "\")") ))) (close arch))
	  (alert (princ (strcat "It was not possible to write to \"acadDoc.lsp\". Open the file yourself and write:   (load \"" nmarchLL "\")")))
	)
      )
      (cond
	((and a (not r))
	  (if (setq arch (open nmarch "a")) (progn (write-line (strcat "(load \"" nmarchLL "\")") arch) (close arch) (alert "\"acadDoc.lsp\" has been successfully modified")))
	)
	(a (vlax-invoke-method (vlax-create-object "wscript.shell") 'popup "\"acadDoc.lsp\" is correct.\nNo modifications were necessary" 0 "Checking \"acadDoc.lsp\"..." 0) )
;;;	(nmarch (if (setq arch (open nmarch "w")) (progn (write-line "(LOAD \"LISTALISPS.LSP\")" arch) (close arch))))
	(nmarch
	  (if (setq arch (open nmarch "w"))
	    (progn (write-line (strcat "(load \"" nmarchLL "\")") arch) (close arch) (alert "\"acadDoc.lsp\" has been successfully modified"))
	    (if (= (vlax-invoke-method (vlax-create-object "wscript.shell") 'popup
		     "It appears that it is not possible to write to the \"Support\" directory.\nWould you like me to try to unlock access permisions?" 0 "Access AutoCAD directory"
		     4
		   )
	           6
	        )
	      (progn
	        (ttpp (vl-filename-directory nmarch))
		(if (setq arch (open nmarch "w"))
		  (progn (write-line (strcat "(load \"" nmarchLL "\")") arch) (close arch) (alert "DONE!!!\n\n\"acadDoc.lsp\" has been successfully modified"))
		  (vlax-invoke-method
		    (vlax-create-object "wscript.shell")
		    'popup
		    "The attempt didn't work.\nYou'll need to troubleshoot the problem manually:\n\nDo the following:\nStart StartSuite, find \"ListaLisps.lsp\" file in \"Documents\" folder and select it to load every time you start it.\n\nThis will resolve the issue"
		    0
		    "Access AutoCAD directory"
		    0
		  )
		)
	      )
	    )

	  )
	)
	(T (alert "Ocurrió lo inesperado"))
      )
      (if arch (startapp "notepad" nmarch))
    )
  )
  (SETVAR "SECURELOAD" sl)
  (princ)
)

 

 

Code does almost everything
Or at least it tries to:

–Unlocks access privileges to "Support" (if necessary)
–Checks the privileges with which AutoCAD is running
–Adds to 'SupportPath' the directory of the lisp files to be loaded
–Writes to acadDoc.lsp (yes, no longer acad.lsp).
–And if something goes wrong, it will probably give you an explanation of what you need to do.

That said: I haven’t included a complaints form 🤪

  • Like 1
Posted (edited)
2 hours ago, GLAVCVS said:

Code does almost everything
Or at least it tries to:

–Unlocks access privileges to "Support" (if necessary)
–Checks the privileges with which AutoCAD is running
–Adds to 'SupportPath' the directory of the lisp files to be loaded
–Writes to acadDoc.lsp (yes, no longer acad.lsp).
–And if something goes wrong, it will probably give you an explanation of what you need to do.

My deep respect to all those who responded and guided me on the right path. 
I didn't expect the question to be difficult.

Regarding the latest code GLAVCVS, here are the messages:

Access AutoCAD directory
and such an entry in the command line:
*** 4 files LOADED ***
*** New SupportPath: C:\Program Files\Autodesk\AutoCAD 2021\Support\StartUPSupp

Files from the StartUPSupp folder were uploaded to this drawing, but I did not find the "ListaLisps" file.Isp" in the "Documents" folder.
Access AutoCAD directory.png

 

Access AutoCAD directory1.png

Edited by Nikon
Posted

@Nikon

My 2c .. place all your lisp files in a subfolder under "MYDOCUMENTS". Then you don't have to worry about permissions, AutoCAD version or usernames.

(strcat (getvar "MYDOCUMENTSPREFIX") "\\LISP")

Then add this to your support paths and DONE!

Posted (edited)
27 minutes ago, Nikon said:

My deep respect to all those who responded and guided me on the right path. 
I didn't expect the question to be difficult.

Regarding the latest code GLAVCVS, here are the messages:

Access AutoCAD directory
and such an entry in the command line:
*** 4 files LOADED ***
*** New SupportPath: C:\Program Files\Autodesk\AutoCAD 2021\Support\StartUPSupp

Files from the StartUPSupp folder were uploaded to this drawing, but I did not find the "ListaLisps" file.Isp" in the "Documents" folder.
Access AutoCAD directory.png

 

Access AutoCAD directory1.png

 

I've edited the code so that, upon completion of the command, the "ListaLisp.lsp" file opens with Notepad.
Try again.

 

PS:  "ListaLisps.lsp" file must have been created.
Otherwise, the subsequent messages would not have appeared.

Edited by GLAVCVS

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Unfortunately, your content contains terms that we do not allow. Please edit your content to remove the highlighted words below.
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...