Как проверить, работает ли приложение с использованием AutoLISP - PullRequest
2 голосов
/ 26 марта 2020

В приложении CAD (ZWCAD) я запускаю свое приложение с помощью AutoLISP.

(startapp "C://[path]//Application.exe")

, поэтому приложение запускается при каждом создании нового файла. Работает нормально.

Теперь я хочу ограничить количество экземпляров приложения одним. Так как я могу проверить, запущено ли уже приложение?

Ответы [ 2 ]

2 голосов
/ 27 марта 2020

Сегодня я нашел более простой способ. Готова к использованию функция LISP

(dos_processes)

, которая возвращает список всех запущенных процессов.

1 голос
/ 26 марта 2020

Вы можете использовать функцию для запроса Win32_Process WMI-класса для процесса с именем, соответствующим вашему заданному приложению.

Такая функция может быть записана в следующим образом:

;; Win32 Process-p  -  Lee Mac
;; Returns T if a process exists with the supplied name

(defun LM:win32process-p ( pro / qry rtn srv wmi )
    (if (setq wmi (vlax-create-object "wbemscripting.swbemlocator"))
        (progn
            (setq rtn
                (vl-catch-all-apply
                   '(lambda ( )
                        (setq srv (vlax-invoke wmi 'connectserver)
                              qry (vlax-invoke srv 'execquery (strcat "select * from win32_process where name = '" pro "'"))
                        )
                        (< 0 (vla-get-count qry))
                    )
                )
            )
            (foreach obj (list qry srv wmi)
                (if (= 'vla-object (type obj)) (vlax-release-object obj))
            )
            (and (not (vl-catch-all-error-p rtn)) rtn)
        )
    )
)

Который может быть вызван следующим образом:

_$ (LM:win32process-p "notepad.exe")
T
...