如何利用LISP 判断某个APP是否启动
本帖最后由 dakui 于 2025-1-25 13:48 编辑简单描述一下
我把某个APP启动代码加载到 menu.mnl文件内
(startapp "C:\\_menu\\Bin\\RUN.exe")
导致每开启一个新的CAD,就会再次被执行,导致 RUN.exe 多次开启
有没有办法通过LISP做个判断条件,如果 RUN.exe 启动中,则提示启动中,反之 启动 RUN.exe
过年大神都休息了:'( 通过调用windows的API函数查看进程里有没有这个程序,论坛有这方面知识,自己搜索一下慢慢研究 嘿嘿,正在研究
打算通过VBS或者BAT 来识别APP是否启动
然后再传给LISP
需要走一点点的弯路 用setenv和getenv,或者vl-registry-write和vl-registry-read干点事儿,启动的时候get或read,没读到,启动程序,set或write 如果运行RUN.exe后,有某个函数,问题就简单了。判断这个函数存在与否就行了 最简单是程序里加全局变量。也可以用WMI遍历进程来确定RUN.EXE是否存在 ;判断程序是否运行
;(LM:win32process_p "notepad.exe")
;; 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)
)
)
)
页:
[1]