首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用AutoLISP检查应用程序是否正在运行

如何使用AutoLISP检查应用程序是否正在运行
EN

Stack Overflow用户
提问于 2020-03-26 18:43:50
回答 2查看 168关注 0票数 2

在CAD应用程序(ZWCAD)中,我通过AutoLISP启动我的应用程序。

代码语言:javascript
复制
(startapp "C://[path]//Application.exe")

因此,每次创建新文件时,应用程序都会运行。工作正常。

现在,我想将应用程序的实例限制为一个。那么,如何检查应用程序是否已经在运行呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-03-27 03:43:50

您可以使用一个函数来查询Win32_Process WMI class,以查找名称与给定应用程序匹配的进程。

这样的函数可以用以下方式编写:

代码语言:javascript
复制
;; 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)
        )
    )
)

它可以通过以下方式调用:

代码语言:javascript
复制
_$ (LM:win32process-p "notepad.exe")
T
票数 1
EN

Stack Overflow用户

发布于 2020-03-27 16:19:07

今天我找到了更简单的方法。准备使用LISP函数

代码语言:javascript
复制
(dos_processes)

返回所有正在运行的进程的列表。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60865442

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档