明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 35344|回复: 70

[函数] 我也来个VLISP直接调用WIN API函数

    [复制链接]
发表于 2009-3-5 08:18:00 | 显示全部楼层 |阅读模式
本帖最后由 yyzhan12 于 2022-2-2 23:53 编辑

<p>Vlisp直接调用Win API通用函数:c:ysx-use-api by yyzhan12</p>

本帖子中包含更多资源

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

x

评分

参与人数 2威望 +2 明经币 +3 金钱 +20 贡献 +5 激情 +5 收起 理由
菜卷鱼 + 1 低调更新
mccad + 2 + 2 + 20 + 5 + 5 【精华】好程序

查看全部评分

发表于 2024-7-15 09:12:14 | 显示全部楼层
本帖最后由 baitang36 于 2024-7-15 09:15 编辑
cchessbd 发表于 2022-10-5 17:40
这不好吧,花了钱也学习不到知识。。。
15年以前的老代码了,让大家看看是怎么实现的。如果作者介意,请回复,马上删除
(SETVAR "cmdecho" 0)
(DEFUN C:YSX-USE-API (CZSX               APISM
                      APINAME               CSLIST
                      /                       C:YSX-LOAD-VBA
                      C:YSX-FUNCTION-API
                      C:YSX-USE-VBABAS C:YSX-UNLOAD-DVB
                     )
  (DEFUN C:YSX-LOAD-VBA        ()
    (if        (AND (= (MEMBER "acvba.arx" (ARX)) nil)
             (= (MEMBER "acadvba.arx" (ARX)) nil)
        )
      (PROGN
        (VL-CATCH-ALL-APPLY 'ARXLOAD (LIST (FINDFILE "acvba.arx")))
        (VL-CATCH-ALL-APPLY
          'ARXLOAD
          (LIST (FINDFILE "acadvba.arx"))
        )
        (PRINC "\r                                      \n")
      )
    )
    (PRINC)
  )

  (DEFUN C:YSX-FUNCTION-API (APISM    CZSX     CSLIST        APINAME
                             /              VARLIST  FHZ        CADOBJ
                             CADVBA   BASTEXT  VBAYJ        DGLIST
                            )
    (VL-LOAD-COM)
    (PRINT)
    (setq VARLIST (MAPCAR 'GETVAR (LIST "cmdecho" "users1")))
    (MAPCAR 'SETVAR (LIST "cmdecho" "users1") (LIST 0 ""))
    (setq FHZ nil)
    (C:YSX-LOAD-VBA)
    (if
      (AND (OR (MEMBER "acvba.arx" (ARX)) (MEMBER "acadvba.arx" (ARX)))
           (VL-VLX-LOADED-P "Ysx-Vlisp-WinAPI")
      )
       (PROGN
         (setq CADOBJ (vlax-get-acad-object))
         (command "_.vbanew")
         (command "_.vbanew")
         (setq CADVBA
                (vlax-get
                  (vlax-get (vlax-get CADOBJ 'VBE) 'ACTIVEVBPROJECT)
                  'VBCOMPONENTS
                )
         )
         (COND
           ((/= APISM 888)
            (setq
              BASTEXT (APPEND
                        BASTEXT
                        (LIST APISM
                              "Sub AutoCadVLispUseVbaWinSystemApi()"
                              "dim fhz"
                              "On Error Resume Next"
                        )
                      )
            )
            (COND
              ((= CSLIST nil)
               (setq BASTEXT
                      (APPEND BASTEXT
                              (LIST (STRCAT "fhz = " APINAME "()"))
                      )
               )
              )
              ((/= CSLIST nil)
               (setq VBAYJ "")
               (FOREACH        DGLIST CSLIST
                 (if (= VBAYJ "")
                   (PROGN (setq VBAYJ (VL-PRIN1-TO-STRING DGLIST)))
                   (PROGN (setq        VBAYJ (STRCAT VBAYJ
                                              ","
                                              (VL-PRIN1-TO-STRING DGLIST)
                                      )
                          )
                   )
                 )
               )
               (while
                 (and
                   (VL-STRING-SEARCH (STRCASE "\\\\") (STRCASE VBAYJ))
                 )
                  (setq        VBAYJ (VL-STRING-SUBST
                                "\\"
                                (STRCASE "\\\\")
                                (STRCASE VBAYJ)
                              )
                  )
               )
               (setq BASTEXT
                      (APPEND
                        BASTEXT
                        (LIST (STRCAT "fhz = " APINAME "(" VBAYJ ")")
                        )
                      )
               )
              )
            )
            (COND ((= CZSX nil)
                   (setq BASTEXT
                          (APPEND
                            BASTEXT
                            (LIST
                              "ThisDrawing.SetVariable \"users1\", CStr(fhz)"
                            )
                          )
                   )
                  )
                  ((= CZSX T)
                   (setq BASTEXT
                          (APPEND
                            BASTEXT
                            (LIST
                              "ThisDrawing.SetVariable \"users1\", fhz"
                            )
                          )
                   )
                  )
            )
            (setq BASTEXT (APPEND BASTEXT (LIST "End Sub")))
            (setq APINAME "AutoCadVLispUseVbaWinSystemApi")
           )
           ((= APISM 888) (setq BASTEXT CSLIST))
         )
         (C:YSX-USE-VBABAS APISM CADVBA BASTEXT APINAME)
         (C:YSX-UNLOAD-DVB)
         (if (/= (GETVAR "users1") "")
           (PROGN
             (COND ((= CZSX nil) (setq FHZ (READ (GETVAR "users1"))))
                   ((= CZSX T) (setq FHZ (GETVAR "users1")))
             )
           )
         )
       )
    )
    (MAPCAR 'SETVAR (LIST "cmdecho" "users1") VARLIST)
    FHZ
  )
  (vl-ACAD-defun 'C:YSX-FUNCTION-API)
  (DEFUN C:YSX-USE-VBABAS
         (APISM CADVBA TEXTLIST VBANAME / WRTEXT DGLIST)
    (setq WRTEXT "")
    (FOREACH DGLIST TEXTLIST
      (if (= WRTEXT "")
        (PROGN (setq WRTEXT DGLIST))
        (PROGN (setq WRTEXT (STRCAT WRTEXT "\n" DGLIST)))
      )
    )
    (vlax-invoke-method
      (vlax-get        (vlax-get (vlax-get (vlax-get-acad-object) 'VBE)
                          'SELECTEDVBCOMPONENT
                )
                'CODEMODULE
      )
      'ADDFROMSTRING
      WRTEXT
    )
    (VL-VBARUN (STRCAT "ThisDrawing." VBANAME))
    (PRINC)
  )
  (vl-ACAD-defun 'C:YSX-USE-VBABAS)
  (DEFUN C:YSX-UNLOAD-DVB (/ FHZ CADOBJ DVBNAME DVBZBJ)
    (setq FHZ nil)
    (setq CADOBJ (vlax-get-acad-object))
    (setq DVBNAME
           (vlax-get (vlax-get (vlax-get CADOBJ 'VBE) 'MAINWINDOW)
                     'CAPTION
           )
    )
    (PRINC "\r                                      \n")
    (setq DVBZBJ "")
    (COND ((VL-STRING-SEARCH (STRCASE "全局") (STRCASE DVBNAME))
           (setq DVBZBJ "全局")
          )
          ((VL-STRING-SEARCH (STRCASE "global") (STRCASE DVBNAME))
           (setq DVBZBJ "global")
          )
    )
    (if        (OR (= (STRCASE DVBZBJ) (STRCASE "全局"))
            (= (STRCASE DVBZBJ) (STRCASE "global"))
        )
      (PROGN (setq DVBNAME (READ (SUBSTR DVBNAME
                                         (+ (VL-STRING-SEARCH
                                              (STRCASE DVBZBJ)
                                              (STRCASE DVBNAME)
                                            )
                                            (+ (STRLEN DVBZBJ) 1)
                                         )
                                 )
                           )
             )
             (vlax-invoke-method
               CADOBJ
               'UNLOADDVB
               (CAR (LIST (STRCAT DVBZBJ (ITOA DVBNAME))
                          (vlax-invoke-method
                            (vlax-get-or-create-object "wscript.shell")
                            'SENDKEYS
                            (STRCAT "{N}")
                          )
                    )
               )
             )
             (vlax-invoke-method
               CADOBJ
               'UNLOADDVB
               (STRCAT DVBZBJ (ITOA (+ DVBNAME 1)))
             )
             (setq FHZ T)
      )
    )
    FHZ
  )
  (vl-ACAD-defun 'C:YSX-UNLOAD-DVB)
  (VL-CATCH-ALL-APPLY
    'C:YSX-FUNCTION-API
    (LIST APISM CZSX CSLIST APINAME)
  )
)


(DEFUN C:QWERTYUIOPASDFGHJKLZXCVBNM9638527410 () T)

(if (VL-VLX-LOADED-P "Ysx-Vlisp-WinAPI")
  (PROGN
    (if
      (/= (EQUAL (MAPCAR 'STRCASE
                         (VL-LIST-EXPORTED-FUNCTIONS "Ysx-Vlisp-WinAPI")
                 )
                 (MAPCAR 'STRCASE
                         (LIST "c:qwertyuiopasdfghjklzxcvbnm9638527410"
                               "c:ysx-use-api"
                         )
                 )
          )
          T
      )
       (PROGN (setq C:YSX-USE-API nil)
              (setq C:YSX-LOAD-VBA nil)
              (setq C:YSX-FUNCTION-API nil)
              (setq C:YSX-USE-VBABAS nil)
              (setq C:YSX-UNLOAD-DVB nil)
       )
    )
  )
)
(if (= (VL-VLX-LOADED-P "Ysx-Vlisp-WinAPI") nil)
  (PROGN (setq C:YSX-USE-API nil)
         (setq C:YSX-LOAD-VBA nil)
         (setq C:YSX-FUNCTION-API nil)
         (setq C:YSX-USE-VBABAS nil)
         (setq C:YSX-UNLOAD-DVB nil)
  )
)
(PRINC)
发表于 2024-7-19 15:22:24 | 显示全部楼层
baitang36 发表于 2024-7-15 09:12
15年以前的老代码了,让大家看看是怎么实现的。如果作者介意,请回复,马上删除
(SETVAR "cmdecho" 0)
(D ...

一看楼主就是高手,可能都忘记这个程序了。我试了一下,可能公司电脑剪粘板的限制,用不了呀
  1. ;|http://bbs.mjtd.com/thread-74063-1-1.html
  2. Vlisp直接调用Win API通用函数:c:ysx-use-api by yyzhan12
  3. 参数说明:
  4. 1、参数1
  5. API返回值类型,long为nil, string为T
  6. 返回值目前仅支持long和string,其他类型的日后完善

  7. 2、参数2
  8. API函数声明,文本

  9. 3、参数3
  10. API函数名称

  11. 4、参数4
  12. API函数参数表

  13. 例子:
  14. (c:ysx-use-api nil "Private Declare Function GetCurrentProcessId Lib \"kernel32\" () As Long" "GetCurrentProcessId" nil)
  15. 获取进程标识符

  16. (c:ysx-use-api nil "Private Declare Function ShowCursor Lib \"user32\" Alias \"ShowCursor\" (ByVal bShow As Long) As Long" "ShowCursor" (list 1))
  17. 显示鼠标

  18. (c:ysx-use-api nil "Private Declare Function ShowCursor Lib \"user32\" Alias \"ShowCursor\" (ByVal bShow As Long) As Long" "ShowCursor" (list 0))
  19. 隐藏鼠标

  20. (c:ysx-use-api nil "Private Declare Function CopyFile Lib \"kernel32\" Alias \"CopyFileA\" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long" "CopyFile" (list "c:\\bootfont.bin" "d:\\1.vxd" 0))
  21. 复制文件


  22. ____________________________________________________________________________________________
  23. Vlisp直接调用Win API函数
  24. 解决了以下几个问题:
  25. 1、解决了AutoCAD退出时提示保存工程的问题。
  26. 2、解决了连续调用API时卸载工程不成功的问题
  27. 3、解决命令行多余信息显示的问题
  28. 4、解决影响其它工程的问题
  29. 5、改进Win API代码的加载方式
  30. 6、加强了程序代码反破解功能
  31. |;

  32. ;;[加载VBA] 如果没有安装VBA,此函数没有用。
  33. (DEFUN C:YSX-LOAD-VBA ()
  34.   (if
  35.     (AND (= (MEMBER "acvba.arx" (ARX)) nil)
  36.          (= (MEMBER "acadvba.arx" (ARX)) nil)
  37.     )
  38.      (PROGN
  39.        (VL-CATCH-ALL-APPLY 'ARXLOAD (LIST (FINDFILE "acvba.arx")))
  40.        (VL-CATCH-ALL-APPLY 'ARXLOAD (LIST (FINDFILE "acadvba.arx")))
  41.        (PRINC "\r \n")
  42.      )
  43.   )
  44.   (PRINC)
  45. )

  46. ;;[卸载DVB]
  47. (DEFUN C:YSX-UNLOAD-DVB        (/ FHZ CADOBJ DVBNAME DVBZBJ)
  48.   (setq FHZ nil)
  49.   (setq CADOBJ (vlax-get-acad-object))
  50.   (setq        DVBNAME
  51.          (vlax-get (vlax-get (vlax-get CADOBJ 'VBE) 'MAINWINDOW)
  52.                    'CAPTION
  53.          )
  54.   )
  55.   (PRINC "\r                                      \n")
  56.   (setq DVBZBJ "")
  57.   (COND        ((VL-STRING-SEARCH (STRCASE "全局") (STRCASE DVBNAME))
  58.          (setq DVBZBJ "全局")
  59.         )
  60.         ((VL-STRING-SEARCH (STRCASE "global") (STRCASE DVBNAME))
  61.          (setq DVBZBJ "global")
  62.         )
  63.   )
  64.   (if (OR (= (STRCASE DVBZBJ) (STRCASE "全局"))
  65.           (= (STRCASE DVBZBJ) (STRCASE "global"))
  66.       )
  67.     (PROGN (setq DVBNAME (READ (SUBSTR DVBNAME
  68.                                        (+ (VL-STRING-SEARCH
  69.                                             (STRCASE DVBZBJ)
  70.                                             (STRCASE DVBNAME)
  71.                                           )
  72.                                           (+ (STRLEN DVBZBJ) 1)
  73.                                        )
  74.                                )
  75.                          )
  76.            )
  77.            (vlax-invoke-method
  78.              CADOBJ
  79.              'UNLOADDVB
  80.              (CAR (LIST        (STRCAT DVBZBJ (ITOA DVBNAME))
  81.                         (vlax-invoke-method
  82.                           (vlax-get-or-create-object "wscript.shell")
  83.                           'SENDKEYS
  84.                           (STRCAT "{N}")
  85.                         )
  86.                   )
  87.              )
  88.            )
  89.            (vlax-invoke-method
  90.              CADOBJ
  91.              'UNLOADDVB
  92.              (STRCAT DVBZBJ (ITOA (+ DVBNAME 1)))
  93.            )
  94.            (setq FHZ T)
  95.     )
  96.   )
  97.   FHZ
  98. )
  99. (vl-ACAD-defun 'C:YSX-UNLOAD-DVB)

  100. ;;[使用VBABAS]
  101. (DEFUN C:YSX-USE-VBABAS        (APISM CADVBA TEXTLIST VBANAME / WRTEXT DGLIST)
  102.   (setq WRTEXT "")
  103.   (FOREACH DGLIST TEXTLIST
  104.     (if        (= WRTEXT "")
  105.       (setq WRTEXT DGLIST)
  106.       (setq WRTEXT (STRCAT WRTEXT "\n" DGLIST))
  107.     )
  108.   )
  109.   (vlax-invoke-method
  110.     (vlax-get
  111.       (vlax-get        (vlax-get (vlax-get-acad-object) 'VBE)
  112.                 'SELECTEDVBCOMPONENT
  113.       )
  114.       'CODEMODULE
  115.     )
  116.     'ADDFROMSTRING
  117.     WRTEXT
  118.   )
  119.   (VL-VBARUN (STRCAT "ThisDrawing." VBANAME))
  120.   (PRINC)
  121. )
  122. (vl-ACAD-defun 'C:YSX-USE-VBABAS)

  123. ;;[API]
  124. (DEFUN C:YSX-FUNCTION-API (APISM    CZSX     CSLIST   APINAME  /
  125.                            VARLIST  FHZ             CADOBJ   CADVBA   BASTEXT
  126.                            VBAYJ    DGLIST
  127.                           )
  128.   (VL-LOAD-COM)
  129.   (PRINT)
  130.   (setq VARLIST (MAPCAR 'GETVAR (LIST "cmdecho" "users1")))
  131.   (MAPCAR 'SETVAR (LIST "cmdecho" "users1") (LIST 0 ""))
  132.   (setq FHZ nil)
  133.   (C:YSX-LOAD-VBA)
  134.   (if
  135.     (AND (OR (MEMBER "acvba.arx" (ARX)) (MEMBER "acadvba.arx" (ARX)))
  136.          (VL-VLX-LOADED-P "Ysx-Vlisp-WinAPI")
  137.     )
  138.      (PROGN
  139.        (setq CADOBJ (vlax-get-acad-object))
  140.        (command "_.vbanew")
  141.        (command "_.vbanew")
  142.        (setq
  143.          CADVBA        (vlax-get
  144.                   (vlax-get (vlax-get CADOBJ 'VBE) 'ACTIVEVBPROJECT)
  145.                   'VBCOMPONENTS
  146.                 )
  147.        )
  148.        (COND
  149.          ((/= APISM 888)
  150.           (setq        BASTEXT
  151.                  (APPEND BASTEXT
  152.                          (LIST APISM
  153.                                "Sub AutoCadVLispUseVbaWinSystemApi()"
  154.                                "dim fhz"
  155.                                "On Error Resume Next"
  156.                          )
  157.                  )
  158.           )
  159.           (COND
  160.             ((= CSLIST nil)
  161.              (setq
  162.                BASTEXT (APPEND BASTEXT
  163.                                (LIST (STRCAT "fhz = " APINAME "()"))
  164.                        )
  165.              )
  166.             )
  167.             ((/= CSLIST nil)
  168.              (setq VBAYJ "")
  169.              (FOREACH DGLIST CSLIST
  170.                (if (= VBAYJ "")
  171.                  (PROGN (setq VBAYJ (VL-PRIN1-TO-STRING DGLIST)))
  172.                  (PROGN
  173.                    (setq
  174.                      VBAYJ
  175.                       (STRCAT VBAYJ "," (VL-PRIN1-TO-STRING DGLIST))
  176.                    )
  177.                  )
  178.                )
  179.              )
  180.              (while
  181.                (and (VL-STRING-SEARCH (STRCASE "\\\\") (STRCASE VBAYJ))
  182.                )
  183.                 (setq
  184.                   VBAYJ
  185.                    (VL-STRING-SUBST
  186.                      "\\"
  187.                      (STRCASE "\\\\")
  188.                      (STRCASE VBAYJ)
  189.                    )
  190.                 )
  191.              )
  192.              (setq BASTEXT
  193.                     (APPEND
  194.                       BASTEXT
  195.                       (LIST (STRCAT "fhz = " APINAME "(" VBAYJ ")"))
  196.                     )
  197.              )
  198.             )
  199.           )
  200.           (COND        ((= CZSX nil)
  201.                  (setq BASTEXT
  202.                         (APPEND
  203.                           BASTEXT
  204.                           (LIST
  205.                             "ThisDrawing.SetVariable \"users1\", CStr(fhz)"
  206.                           )
  207.                         )
  208.                  )
  209.                 )
  210.                 ((= CZSX T)
  211.                  (setq BASTEXT
  212.                         (APPEND
  213.                           BASTEXT
  214.                           (LIST        "ThisDrawing.SetVariable \"users1\", fhz"
  215.                           )
  216.                         )
  217.                  )
  218.                 )
  219.           )
  220.           (setq BASTEXT (APPEND BASTEXT (LIST "End Sub")))
  221.           (setq APINAME "AutoCadVLispUseVbaWinSystemApi")
  222.          )
  223.          ((= APISM 888) (setq BASTEXT CSLIST))
  224.        )
  225.        (C:YSX-USE-VBABAS APISM CADVBA BASTEXT APINAME)
  226.        (C:YSX-UNLOAD-DVB)
  227.        (if (/= (GETVAR "users1") "")
  228.          (PROGN
  229.            (COND ((= CZSX nil) (setq FHZ (READ (GETVAR "users1"))))
  230.                  ((= CZSX T) (setq FHZ (GETVAR "users1")))
  231.            )
  232.          )
  233.        )
  234.      )
  235.   )
  236.   (MAPCAR 'SETVAR (LIST "cmdecho" "users1") VARLIST)
  237.   FHZ
  238. )
  239. (vl-ACAD-defun 'C:YSX-FUNCTION-API)

  240. ;;主函数
  241. (SETVAR "cmdecho" 0)
  242. (DEFUN C:YSX-USE-API (CZSX APISM APINAME CSLIST)
  243.   (VL-CATCH-ALL-APPLY
  244.     'C:YSX-FUNCTION-API
  245.     (LIST APISM CZSX CSLIST APINAME)
  246.   )
  247. )



  248. ;|;以下的函数几本没什么用处
  249. (DEFUN C:QWERTYUIOPASDFGHJKLZXCVBNM9638527410 () T);用来防反编译??

  250. ;;Ysx-Vlisp-WinAPI是此文件编译成VLX后的文件名
  251. ;;VL-LIST-EXPORTED-FUNCTIONS 返回vlx中C:定义的函数名列表
  252. (if (VL-VLX-LOADED-P "Ysx-Vlisp-WinAPI")
  253.   (PROGN
  254.     (if
  255.       (EQUAL (MAPCAR 'STRCASE
  256.                      (VL-LIST-EXPORTED-FUNCTIONS "Ysx-Vlisp-WinAPI")
  257.              )
  258.              (MAPCAR 'STRCASE
  259.                      (LIST "c:qwertyuiopasdfghjklzxcvbnm9638527410"
  260.                            "c:ysx-use-api"
  261.                      )
  262.              )
  263.       )
  264.        nil
  265.        (PROGN
  266.          (setq C:YSX-USE-API nil)
  267.          (setq C:YSX-LOAD-VBA nil)
  268.          (setq C:YSX-FUNCTION-API nil)
  269.          (setq C:YSX-USE-VBABAS nil)
  270.          (setq C:YSX-UNLOAD-DVB nil)
  271.        )
  272.     )
  273.   )
  274. )
  275. (if (VL-VLX-LOADED-P "Ysx-Vlisp-WinAPI")
  276.   nil
  277.   (PROGN
  278.     (setq C:YSX-USE-API nil)
  279.     (setq C:YSX-LOAD-VBA nil)
  280.     (setq C:YSX-FUNCTION-API nil)
  281.     (setq C:YSX-USE-VBABAS nil)
  282.     (setq C:YSX-UNLOAD-DVB nil)
  283.   )
  284. )
  285. |;
  286. (PRINC)
发表于 2024-7-22 12:25:28 | 显示全部楼层
自贡黄明儒 发表于 2024-7-19 15:22
一看楼主就是高手,可能都忘记这个程序了。我试了一下,可能公司电脑剪粘板的限制,用不了呀

想试试作者是否已经退出江湖了
 楼主| 发表于 2009-3-5 08:22:00 | 显示全部楼层
本帖最后由 yyzhan12 于 2010-12-5 19:30 编辑

Vlisp直接调用Win API通用函数:c:ysx-use-api by yyzhan12

参数说明:

1、参数1

API返回值类型,long为nil, string为T

返回值目前仅支持long和string,其他类型的日后完善

2、参数2

API函数声明,文本

3、参数3

API函数名称

4、参数4

API函数参数表

例子:

(c:ysx-use-api nil "Private Declare Function GetCurrentProcessId Lib \"kernel32\" () As Long" "GetCurrentProcessId" nil)

获取进程标识符

(c:ysx-use-api nil "Private Declare Function ShowCursor Lib \"user32\" Alias \"ShowCursor\" (ByVal bShow As Long) As Long" "ShowCursor" (list 1))

显示鼠标

(c:ysx-use-api nil "Private Declare Function ShowCursor Lib \"user32\" Alias \"ShowCursor\" (ByVal bShow As Long) As Long" "ShowCursor" (list 0))

隐藏鼠标

(c:ysx-use-api nil "Private Declare Function CopyFile Lib \"kernel32\" Alias \"CopyFileA\" (ByVal lpExistingFileName As String, ByVal lpNewFileName As String, ByVal bFailIfExists As Long) As Long" "CopyFile" (list "c:\\bootfont.bin" "d:\\1.vxd" 0))

复制文件


____________________________________________________________________________________________

Vlisp直接调用Win API函数

解决了以下几个问题:

1、解决了AutoCAD退出时提示保存工程的问题。

2、解决了连续调用API时卸载工程不成功的问题

3、解决命令行多余信息显示的问题

4、解决影响其它工程的问题

5、改进Win API代码的加载方式

6、加强了程序代码反破解功能

____________________________________________________________________________________________

程序已更新 2009-4-4

本帖子中包含更多资源

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

x
发表于 2009-3-5 08:42:00 | 显示全部楼层
本帖最后由 作者 于 2009-4-16 9:51:20 编辑

不错不错

终于有人明白了 呵呵

核心的秘密已经揭晓 感兴趣的朋友可以参考研究:

http://www.mjtd.com/BBS/dispbbs.asp?BoardID=3&replyID=115948&id=72145&skin=0

 楼主| 发表于 2009-3-5 13:40:00 | 显示全部楼层
nonsmall发表于2009-3-5 8:42:00不错不错终于有人明白了 呵呵咱们讨论一下最后关闭AutoCAD的时候会有个是否保存工程的提示另外没有alert的话 你这个程序一定会有不好使的情况这几个问题怎么解决?

1、最后关闭AutoCAD的时候会有个是否保存工程的提示

这个暂时没想到怎么解决,这是美中不足,多多少少留下了手尾,明白人一看就知道怎么回事了,我想你的程序之前没放出来是不是有这方面的原因。

2、另外没有alert的话 你这个程序一定会有不好使的情况

这个不是问题,这是关于返回值的处理问题,在你帖子我已经提出了几种方法,隐蔽性做到无痕迹最好不过了

3、在你的帖子中给出的提示,可能让不少人做了很多无用功,因为关键语句就是两条,之前也想过这种方法,我想用过VBA的人应该也会

想过,以前用add不成功,就没细想了,不过你的“ VLisp开发小助手”真的很实用。要想用VLISP做扩展,那就要用好vlax-invoke-method

发表于 2009-3-5 13:53:00 | 显示全部楼层

保存的提示我有下面的尝试:

1是程序结束之前把工程保存一下 可以做到退出AUTOCAD不提示

(但我没保存成功)

2是程序结束前使用命令VBAUNLOAD但是会弹出提示框询问

(我尝试使用Sendkeys操作该提示框 有时可以 有时不可 奇也怪哉)

我之所以还没放出来 因为我抽空在研究Vlx封装VBA窗体 这个已经实现了

 楼主| 发表于 2009-3-5 16:15:00 | 显示全部楼层
本帖最后由 作者 于 2009-3-11 21:48:10 编辑

请转至1楼

发表于 2009-3-5 16:30:00 | 显示全部楼层

厉害,啊,神啊,无敌啊,NON哥,太厉害啦,

 楼主| 发表于 2009-3-5 16:32:00 | 显示全部楼层
本帖最后由 作者 于 2009-3-5 17:07:56 编辑

nonsmall发表于2009-3-5 13:53:00保存的提示我有下面的尝试:1是程序结束之前把工程保存一下 可以做到退出AUTOCAD不提示(但我没保存成功)2是程序结束前使用命令VBAUNLOAD但是会弹出提示框询问(我尝试使用Sendkeys操作该提示框 有

Vlx封装VBA窗体,和调用API有何区别?

发表于 2009-3-5 17:22:00 | 显示全部楼层
本帖最后由 作者 于 2009-3-5 17:24:52 编辑

我已经找出API部分的破解方法了:

Private Declare Function GetCurrentProcessId Lib "kernel32" () As Long
Sub AutoCadVLispUseVbaSystemApi()
msgbox "当前Acad程序的PID(进程标识符)为:" & CStr(GetCurrentProcessId()), vbInformation, "Vlisp调用API函数"
End Sub

本帖子中包含更多资源

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

x
 楼主| 发表于 2009-3-5 17:53:00 | 显示全部楼层
和你的有什么异同的地方没有?
您需要登录后才可以回帖 登录 | 注册

本版积分规则

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

GMT+8, 2024-11-25 22:19 , Processed in 0.232808 second(s), 28 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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