明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
12
返回列表 发新帖
楼主: wp6667

[其它] 命令行打开excle&word

[复制链接]
发表于 前天 16:24 | 显示全部楼层
;; 从注册表读取字符串值(兼容版)
(defun get-reg-string (key / regobj result)
  (vl-load-com)
  (setq result nil)
  (if (setq regobj (vlax-create-object "WScript.Shell"))
    (progn
      (setq result
        (vl-catch-all-apply
          (function (lambda () (vlax-invoke-method regobj "RegRead" key)))
          nil
        )
      )
      (if (vl-catch-all-error-p result)
        (setq result nil)  ; 捕获错误,返回nil
      )
      (if result
        (setq result (vl-string-trim "\"" result))  ; 去除可能的引号
      )
      (vlax-release-object regobj)
    )
  )
  result
)

;; 判断字符串是否为空(替代vl-string-empty-p,兼容低版本)
(defun string-empty-p (s)
  (or (not s) (= (strlen (vl-string-trim " " s)) 0))
)

;; 查找并启动Office程序(兼容版)
(defun start-office-app (app-name)
  (setq app-exe (strcat app-name ".exe"))  ; 程序文件名
  ;; 注册表路径(包含32/64位、系统/用户路径)
  (setq base-keys '(
    "HKLM\\Software\\Microsoft\\Office\\"
    "HKLM\\Software\\Wow6432Node\\Microsoft\\Office\\"
    "HKCU\\Software\\Microsoft\\Office\\"
    "HKCU\\Software\\Wow6432Node\\Microsoft\\Office\\"
  ))
  ;; Office版本范围(从Office 97到2025)
  (setq versions '("8.0" "9.0" "10.0" "11.0" "12.0" "14.0" "15.0" "16.0" "17.0" "18.0" "19.0" "20.0" "21.0" "22.0"))
  (setq found nil)
  
  ;; 遍历所有可能的注册表路径和版本
  (foreach base-key base-keys
    (foreach version versions
      ;; 尝试标准程序路径
      (setq reg-path1 (strcat base-key version "\\" app-name "\\InstallRoot\\Path"))
      (setq path1 (get-reg-string reg-path1))
      
      ;; 尝试Office共享安装路径
      (setq reg-path2 (strcat base-key version "\\Common\\InstallRoot\\Path"))
      (setq path2 (get-reg-string reg-path2))
      
      ;; 验证并启动程序
      (foreach path (list path1 path2)
        (if (and path (not (string-empty-p path)))  ; 使用自定义函数判断非空
          (progn
            ;; 处理路径末尾的反斜杠
            (setq full-path
              (strcat
                (if (= (substr path (strlen path)) "\\")
                  path
                  (strcat path "\\"))
                app-exe
              )
            )
            ;; 检查文件是否存在
            (if (findfile full-path)
              (progn
                (startapp full-path)
                (princ (strcat "\n已启动 " (if (= app-name "WINWORD") "Word" "Excel")
                         "(版本:" version ",路径:" full-path ")"))
                (setq found T)
                (return)  ; 找到后退出所有循环
              )
            )
          )
        )
      )
      (if found (return))
    )
    (if found (return))
  )
  
  ;; 备选方案:通过系统命令启动
  (if (not found)
    (progn
      (princ (strcat "\n未找到" (if (= app-name "WINWORD") "Word" "Excel") "安装路径,尝试默认启动..."))
      (if (eq (startapp (strcat "cmd /c start " app-exe)) 0)
        (princ (strcat "\n已通过系统默认关联启动" (if (= app-name "WINWORD") "Word" "Excel")))
        (princ (strcat "\n启动失败,请检查" (if (= app-name "WINWORD") "Word" "Excel") "是否正确安装"))
      )
    )
  )
  (princ)
)

;; 定义Word启动命令
(defun c:word ()
  (start-office-app "WINWORD")
)

;; 定义Excel启动命令
(defun c:excel ()
  (start-office-app "EXCEL")
)

(princ "\nOffice程序启动工具(兼容版)已加载")
(princ "\n命令: WORD - 启动Word")
(princ "\n命令: EXCEL - 启动Excel\n")
(princ)
回复 支持 1 反对 0

使用道具 举报

发表于 前天 16:28 | 显示全部楼层
老A8配置,高级
回复 支持 反对

使用道具 举报

发表于 前天 16:59 | 显示全部楼层
hao3ren 发表于 2025-10-27 16:24
;; 从注册表读取字符串值(兼容版)
(defun get-reg-string (key / regobj result)
  (vl-load-com)


大佬借用你的源码和AI搞了一个,打开浏览器有BUG,不修复了,纯娱乐

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?注册

x
回复 支持 反对

使用道具 举报

发表于 前天 17:14 | 显示全部楼层
太神奇了,膜拜大佬
回复 支持 反对

使用道具 举报

发表于 前天 17:28 | 显示全部楼层
能打开wps会更好,wps用的较多
回复 支持 反对

使用道具 举报

 楼主| 发表于 前天 17:32 | 显示全部楼层
bai2000 发表于 2025-10-27 17:28
能打开wps会更好,wps用的较多

这个可以有~ 关注的多的话,可以增加!
回复 支持 反对

使用道具 举报

发表于 昨天 08:11 | 显示全部楼层
wp6667 发表于 2025-10-27 17:32
这个可以有~ 关注的多的话,可以增加!

来个支持wps的
回复 支持 反对

使用道具 举报

发表于 昨天 08:25 | 显示全部楼层
这次是学精了,哈哈哈

*本插件及配套软件(“本产品”)受版权法和国际条约保护。未经明确授权,禁止任何形式的复制、分发、修改或反向工程。
*本产品按“现状”提供,作者不承担任何直接或间接责任。使用者应自行承担所有风险。
*保留所有权利。
回复 支持 反对

使用道具 举报

发表于 昨天 10:57 | 显示全部楼层
直接设置app的启动快捷键不是更好? AutoCAD 来干这个有什么意义呢?
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|CAD论坛|CAD教程|CAD下载|联系我们|关于明经|明经通道 ( 粤ICP备05003914号 )  
©2000-2023 明经通道 版权所有 本站代码,在未取得本站及作者授权的情况下,不得用于商业用途

GMT+8, 2025-10-29 02:13 , Processed in 0.152433 second(s), 17 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表