Pokud potřebujete ve vaší LISP aplikaci zjistit, zda je spuštěna nějaká externí Windows aplikace či proces (tedy položky, které vidíte ve Správci úloh), můžete využít následující funkci:
(defun isRunning? (procname / apps item 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 (append lst (list (vlax-get item 'CommandLine))))
)
(vlax-release-object WMI)
(vlax-release-object meth1)
(vlax-release-object meth2)
(setq lst (vl-remove nil lst))
(vl-some '(lambda (s) (wcmatch (strcase s) (strcat "*" (strcase procname) "*"))) lst)
)
Jako parametr procname použijte libovolný podřetězec identifikující spouštěcí řetězec dané aplikace nebo procesu - např. parametr "acad.exe" by měl vždy vrátit T, protože AutoCAD je určitě spuštěn:
(isRunning? "acad.exe")
Běží indexovací služba Windows?
(isRunning? "SearchProtocolHost")