明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5773|回复: 20

[原创]系统变量监视器

  [复制链接]
发表于 2008-12-24 19:36 | 显示全部楼层 |阅读模式
本帖最后由 作者 于 2008-12-25 10:49:07 编辑
  1. ;|
  2. ;;;系统变量监视器v1.0  by xshrimp 2008.12.18
  3. |;
  4. (vl-load-reactors)
  5. (defun gps->sysvar-Changed (a b)
  6. (if (cadr b)  (setq sysnew (cons (car b) (getvar (car b)))))
  7. (if
  8.   (and
  9.   (equal       (car sysnew)  (car sysold))
  10.   (not (equal  (cdr sysnew)  (cdr sysold)))
  11.    )
  12.   (progn
  13.   (mapcar
  14.   'princ
  15.   (list "\n系统变量【 "(car sysold)" 】从值 〖"(cdr sysold)" 〗变到〖 "(cdr sysnew)" 〗")
  16.   )
  17.   (if (not (assoc (car sysold) sysresetlst))  
  18.       (setq sysresetlst (append sysresetlst (list sysold)))
  19.   )
  20.   (setq sysold nil)     
  21.   )
  22. )
  23. (prin1)
  24. )
  25. (defun gps->sysvar-WillChange (a b)
  26. (if (car b)(setq sysold (cons  (car b) (getvar (car b)))))
  27. (prin1)
  28. )
  29. (defun sysvar-reactor:start()
  30. (setq sysresetlst nil)
  31. (vlr-sysvar-reactor nil '((:vlr-sysVarChanged     .  gps->sysvar-Changed   )))
  32. (vlr-sysvar-reactor nil '((:vlr-sysVarWillChange  .  gps->sysvar-WillChange)))
  33. (prin1)
  34. )
  35. (defun c:sys( / ukw x)
  36. (defun sysvar-reactor:stop()
  37. (vlr-remove-all :vlr-sysvar-reactor)
  38. (prin1)
  39. )
  40. (defun sysvar-reactor:reset(/ msg)
  41. (mapcar
  42.   '(lambda (x)     
  43.      (setq msg (vl-catch-all-apply 'setvar (list (car x) (cdr x))))
  44.      (if (vl-catch-all-error-p msg )
  45.        (princ (strcat "\n" (vl-catch-all-error-message msg)))
  46.        (mapcar
  47.   'princ
  48.   (list "\n系统变量【 " (car x) " 】恢复到 〖" (cdr x) " 〗")
  49.        )
  50.      )   
  51.    )
  52.   sysresetlst
  53. )
  54. )
  55. (INITGET 2 "S T R")
  56. (setq ukw (GETKWORD  "\n系统变量监视器[启动(S)/停止(T)/恢复系统变量至监视前(R)]"))
  57. (cond
  58. ((= "S" ukw)(sysvar-reactor:start))
  59. ((= "R" ukw)(sysvar-reactor:stop)(sysvar-reactor:reset))
  60. (T (sysvar-reactor:stop))
  61. )
  62. (prin1)
  63. )
  64. (sysvar-reactor:start)
  65. (princ  "\nshlisp.ys168.com xshrimp 2008.12.18")
  66. (princ "\n系统变量监视器,启动命令 SYS ")
  67. (prin1)
用途::对于加载一些未知程序.监控其修改的系统变量.测试完程序.恢复系统变量.
"觉得好,就打赏"
还没有人打赏,支持一下
发表于 2024-4-19 15:40 | 显示全部楼层
(RO)只读的那种变量能监视吗?例如:cdate
发表于 2022-6-18 11:20 | 显示全部楼层
很好的代码,谢谢楼主分享。
发表于 2020-2-10 10:27 | 显示全部楼层
好帖子,必须支持顶一波!
发表于 2008-12-24 20:35 | 显示全部楼层

好啊先下下来看看一下啊

谢谢楼主!!!!

发表于 2008-12-25 09:22 | 显示全部楼层

支持一下

建议增加

:vlr-lispCancelled

在用户ESC非法退出lisp时依然有效

(defun c:test()
 (setvar "osmode" 0)
 (getpoint)
)

命令: test
系统变量【 OSMODE 】从值 〖15359 〗变到〖 0 〗*取消*
; 错误: 函数被取消
命令:

 楼主| 发表于 2008-12-25 10:52 | 显示全部楼层
sys 命令可以恢复原先的系统变量值
发表于 2010-5-9 19:26 | 显示全部楼层

是个好东西

发表于 2011-10-22 11:19 | 显示全部楼层
楼主果然厉害!受教了
发表于 2011-10-23 13:49 | 显示全部楼层
原来这么早就有人发表~
支持源码
发表于 2012-5-3 18:40 | 显示全部楼层
楼主的帖子看见就顶。
发表于 2012-5-6 18:57 | 显示全部楼层
老大的作品,很强大!!
发表于 2012-5-6 20:51 | 显示全部楼层
很感谢楼主的程序,一直想知道units的系统变量,这下终于知道了!

系统变量【 LUPREC 】从值 〖4 〗变到〖 8 〗
多谢了!
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-5-12 21:10 , Processed in 0.162151 second(s), 27 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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