回望南山
记忆痕迹可以鲜明, 回望往事如数家珍——
posts - 177,  comments - 54,  trackbacks - 0

;|  类型库智能化加载
用法: (vlax-load-type-libeary ProgID[STRING] UniquePrefix[STR])
        (vlax-load-type-libeary ProgID[STRING] PrefixList[STR])
  参数1: 与vlax-get-create-object 函数相同的ProgID 字符串
  参数2: 前缀,可以是字符串或表
         表的顺序 (:methods-prefix :properties-prefix :constants-prefix)
说明:
    此函数读取 Windows REGISTRY 并且侦测合适的 DLL/OCX/EXE 类型库并自动加载

返回值:
[成功]: T
[失败]: NIL
|;
(Defun vlax-load-type-library
       (File Prefix / FileX Host N KeyX Val OSVar rtn)
  (setq Host "HKEY_LOCAL_MACHINE\\SOFTWARE\\Classes\\CLSID"
 N    -1
 KeyX (vl-registry-descendents Host)
  )
  (while (< (setq N (1+ N))
     (length KeyX)
  )
    (if (and (setq Val (vl-registry-read
    (strcat Host "\\" (nth N KeyX) "\\ProgID")
         )
      )
      (vl-string-search (strcase File) (strcase Val))
 )
      (setq FileX (vl-registry-read
      (strcat Host "\\" (nth N KeyX) "\\InProcServer32")
    )
     N   (length KeyX)
      )
    )
  )
  (if (= (type Prefix) 'STR)
    (setq Prefix (list Prefix Prefix (strcat ":" Prefix)))
  )
  (if (= (type FileX) 'LIST)
    (setq FileX (cdr FileX))
  )
  (if (= (type FileX) 'STR)
    (progn
      (setq FileX (strcase FileX))
      (foreach OSVar (list "SYSTEMROOT"      "WINDIR"
      "WINBOOTDIR"      "SYSTEMDRIVE"
      "USERNAME"      "COMPUTERNAME"
      "HOMEDRIVE"      "HOMEPATH"
      "PROGRAMFILES"
     )
 (if (vl-string-search (strcat "%" OSVar "%") FileX)
   (setq FileX (vl-string-subst
   (strcase (getenv OSVar))
   (strcat "%" OSVar "%")
   FileX
        )
   )
 )
      )
      (if (setq rtn (findfile FileX))
 (setq rtn
        (vlax-import-type-library
   :tlb-filename
   FileX
   :methods-prefix
   (nth 0 Prefix)
   :properties-prefix
   (nth 1 Prefix)
   :constants-prefix
   (nth 2 Prefix)
        )
 )
      )
    )
  )
  rtn
)
 ;|  转换路径中字符 "/" 为 "\\" 并返回大写值
用法: (vldos-formatpath PathStringToFormat[STRING])
  参数1: 路径字符串
说明:
    此函数转换字符 "/" 为 "\\".
返回值:
[成功]: 转换后的字符串
[失败]: None
|;
(Defun vldos-formatpath (string)
  (while (vl-string-search "/" string)
    (setq string (vl-string-subst "\\" "/" string))
  )
  (while (vl-string-search "\\\\" string)
    (setq string (vl-string-subst "\\" "\\\\" string))
  )
  (setq string (strcase string))
  string
)
 ;|  修改本地磁盘的卷标
用法: (vldos-label DriveLetter[STRING] NewVolumnName[STRING])
  参数1: 盘符 例如: "C" 或 "C:"
  参数2: 新卷标, 如果长度超过11个字符, 自动裁掉
        <<< 本函数不检查字符串是否符合命名规则 >>>
说明:
    修改本地磁盘的卷标. 确保具有相应的权限进行此操作
返回值:
[成功]: 新卷标
[失败]: NIL
|;
(Defun vldos-Label (DRV NEW / Fil DDD ERR)
  (if (> (strlen NEW) 11)
    (setq NEW (substr New 1 11))
  )
  (if (null
 (setq
   Fil (vlax-get-or-create-object "Scripting.FileSystemObject")
 )
      )
    (setq New nil)
    (progn
      (setq DDD (vlax-invoke-method Fil 'GetDrive DRV))
      (vlax-put-property DDD "VolumeName" NEW)
      (if (not (eq (setq NEW (strcase NEW))
     (strcase (vlax-get-property DDD "VolumeName"))
        )
   )
 (setq NEW nil)
      )
      (vlax-release-object DDD)
      (vlax-release-object FIL)
    )
  )
  NEW
)
 ;|  执行 DOS DELTREE 命令
用法: (vldos-deltree DirectoryToDelete[STRING])
  参数1: 要被删除的目录名称. 此函数不显示确认过程,删除文件夹和所有的子文件夹
        如果参数是根目录,江删除所有的子目录.
说明:
    通过 ActiveX 执行 DOS DELTREE/Y 命令. 无需确认,无备份.
    返回值:
[成功]: T
[失败]: NIL
|;
(Defun vldos-Deltree (Folder / sf subf FIL Rtn)
  (cond ((vl-file-directory-p Folder)
  (if (null (setq Fil
     (vlax-get-or-create-object "Scripting.FileSystemObject")
     )
      )
    (setq Rtn nil)
    (progn
      (cond
        ((<= (strlen Folder) 3)
  (if (= (strlen folder) 2)
    (setq folder (strcat folder "\\"))
  )
  (setq subf (vl-directory-files Folder nil -1)
        subf (vl-remove "." subf)
        subf (vl-remove ".." subf)
        subf (vl-remove "Recycled" subf)
  )
  (foreach sf subf
    (vlax-invoke-method
      Fil
      'DeleteFolder
      (strcat folder sf)
      T
    )
  )
        )
        (t (vlax-invoke-method Fil 'DeleteFolder Folder T))
      )
      (vlax-release-object FIL)
      (setq Rtn (not (vl-file-directory-p Folder)))
    )
  )
 )
 ((findfile Folder)
  (vl-file-delete folder)
  (setq Rtn (not (findfile Folder)))
 )
  )
  Rtn
)
 ;|  创建目录
用法: (vldos-mkdir DirectoryToCreate[STRING])
  参数1: 目录的全路径名. 此函数会自动创建参数中所有不存在的目录.
说明:
    可创建多层目录.
返回值:
[成功]: 创建目录的全路径名
[失败]: NIL
|;
(Defun vldos-MkDir (Folder / FolderX Fil FFF Pos DIR DRV)
  (if (null
 (setq
   Fil (vlax-get-or-create-object "Scripting.FileSystemObject")
 )
      )
    (setq Folder nil)
    (progn
      (while (vl-string-search "/" Folder)
 (setq Folder (vl-string-subst "\\" "/" Folder))
      )
      (if (wcmatch Folder "*\\")
 (setq Folder (substr Folder 1 (1- (strlen Folder))))
      )
      (setq FolderX Folder)
      (while (setq Pos (vl-string-search "\\" Folder))
 (setq FFF    (cons (substr Folder 1 Pos) FFF)
       Folder (substr Folder (+ Pos 2))
 )
      )
      (setq FFF (reverse (cons Folder FFF))
     DRV (car FFF)
     FFF (cdr FFF)
      )
      (foreach DIR FFF
 (if
   (null (vl-file-directory-p (setq DRV (strcat DRV "\\" DIR)))
   )
    (vlax-invoke-method
      Fil
      'createfolder
      DRV
    )
 )
      )
      (vlax-release-object Fil)
      (if (setq Folder (vl-file-directory-p FolderX))
 (setq Folder (vldos-formatpath FolderX))
      )
    )
  )
  Folder
)
 ;|  复制文件或目录
用法: (vldos-copy SourceFile/Directory[STRING] TargetFile/Directory[STRING])
  参数1: 源文件或目录
  参数2: 目标目录. 如果包含 "*\\" or "*/", 此函数将在此路径下创建相同的子目录.
说明:
    复制文件或目录.
返回值:
[成功]: 复制的文件或目录字符串.
[失败]: NIL
|;
(Defun vldos-copy (from to / sys folder)
  (setq from (vldos-formatpath from)
 to   (vldos-formatpath to)
  )
  (if (null (vl-file-directory-p to))
    (setq to (vldos-mkdir to))
  )
  (if (setq sys (vlax-get-or-create-object "Shell.Application"))
    (progn
      (if (setq folder (vlax-invoke-method sys 'namespace to))
 (progn
   (princ
     (strcat "\n Copying file(s) from \042"
      FROM     "\042 to \042"
      to      "\042..."
     )
   )
   (vlax-invoke-method folder 'copyhere from (+ 4 16))
   (vlax-release-object folder)
   (princ "...Done!")
 )
      )
      (vlax-release-object sys)
    )
  )
  (princ)
)
 ;|(Defun vldos-copy2 (From to / rtn)
  (cond
    ((vl-file-directory-p From)
     (if (< (strlen to) 3)
       (setq to (strcat to "\\"))
       (if (not (vl-file-directory-p to))
  (vldos-mkdir to)
       )
     )
     (if (setq
    Rtn (vlax-get-or-create-object "Scripting.FileSystemObject")
  )
       (progn
  (vlax-invoke-method Rtn 'CopyFolder From to T)
  (vlax-release-object Rtn)
  (if (vl-file-directory-p to)
    (setq Rtn (vldos-formatpath to))
  )
       )
     )
    )
    ((findfile From)
     (vl-file-copy From to)
     (if (setq rtn (findfile to))
       (setq rtn (vldos-formatpath rtn))
     )
    )
  )
  rtn
)
|;
 ;|  移动文件或目录
用法: (vldos-move SourceFile/Directory[STRING] TargetFile/Directory[STRING])
  参数1: 源文件或目录.
  参数2: 目标目录. 如果包含 "*\\" or "*/", 此函数将在此路径下创建相同的子目录.
说明:
    移动文件或目录.
返回值:
[成功]: 移动后的文件或目录字符串.
[失败]: NIL
|;
(Defun vldos-move (from to / sys folder)
  (if (setq sys (vlax-get-or-create-object "Shell.Application"))
    (progn
      (setq from   (vldos-formatpath from)
     to    (vldos-formatpath to)
     folder (vlax-invoke-method sys 'namespace to)
      )
      (if folder
 (progn
   (princ
     (strcat "\n Moving file(s) from \042"
      FROM     "\042 to \042"
      to      "\042..."
     )
   )
   (vlax-invoke-method folder 'movehere from (+ 4 16))
   (vlax-release-object folder)
   (princ "...Done!")
 )
      )
      (vlax-release-object sys)
    )
  )
  (princ)
)
 ;|  重命名文件或目录
用法: (vldos-rename SourceFile/Directory[STRING] NewName[STRING])
  参数1: 源文件或目录.
  参数2: 新名称.
说明:
    Move a file or a folder.
返回值:
[成功]: 重命名后的文件或目录.
[失败]: NIL
|;
(Defun vldos-rename (From to / Fil folder new parent rtn)
  (cond
    ((vl-file-directory-p From)
     (setq parent (vl-filename-directory From)
    new   (strcat parent to)
     )
     (if (and (setq
  Fil
   (vlax-get-or-create-object "Scripting.FileSystemObject")
       )
       (> (strlen From) 3)
;;; Can not rename root folder
       (null (vl-file-directory-p new))
;;; not an existing folder name
  )
       (progn
  (setq folder (vlax-invoke-method Fil 'GetFolder From))
  (vlax-put-property folder "Name" To)
  (vlax-release-object folder)
  (vlax-release-object Fil)
       )
       (setq parent nil)
     )
    )
    ((findfile From)
     (setq parent (vl-filename-directory from))
     (vl-file-rename From to)
    )
  )
  (if (and parent
    (vl-file-directory-p
      (setq to (strcat parent to))
    )
      )
    (setq rtn (vldos-formatpath to))
  )
  rtn
)
 ;|  返回磁盘的类型
用法: (vldos-drivetype DriveLetter[STRING])
  参数1: 盘符 例如: "C:"
说明:
    返回磁盘的类型
返回值:
[成功]: 磁盘的类型
[失败]: NIL
|;
(Defun vldos-drivetype (drv / Fil drives drive typ rtn)
  (setq rtn "INVALID")
  (if
    (and (setq
    Fil (vlax-get-or-create-object "Scripting.FileSystemObject")
  )
  (equal :vlax-true (vlax-invoke-method Fil 'DriveExists drv))
    )
     (progn
       (setq drives (vlax-get-property Fil 'Drives)
      drive  (vlax-get-property drives 'Item drv)
      typ    (vlax-get-property drive 'DriveType)
      rtn    (nth typ
    (list "UNKNOWN"     "REMOVABLE"
          "FIXED"      "REMOTE"
          "CDROM"      "RAMDISK"
         )
      )
       )
       (vlax-release-object drive)
       (vlax-release-object drives)
       (vlax-release-object Fil)
     )
  )
  rtn
)

 ;|  返回当前的磁盘表
用法: (vldos-alldrive)
说明:
    返回当前的磁盘表
返回值:
[成功]: 返回当前的磁盘表
[失败]: NIL
|;
(Defun vldos-alldrive (/ fil drive drives lst)
  (if (setq Fil (vlax-get-or-create-object "Scripting.FileSystemObject"))
    (progn
      (vlax-for drive (setq drives (vlax-get-property Fil 'Drives))
 (setq lst (cons (vlax-get-property drive 'DriveLetter) lst))
      )
      (vlax-release-object drives)
      (vlax-release-object Fil)
      (setq lst (reverse lst))
    )
  )
  lst
)

 ;|  返回磁盘的特定信息
用法: (vldos-driveinfo DriveLetter[STRING] key[STRING])
  参数1: 盘符 例如: "C:"
  参数2: 所需磁盘信息的字符串
说明:
    返回磁盘的特定信息
返回值:
[成功]: 磁盘的特定信息
[失败]: NIL
所需磁盘信息的字符串
"TOTALSIZE"    磁盘总空间
"FREESPACE"    磁盘可用空间
"DRIVETYPE"    磁盘类型
"FILESYSTEM"   文件系统类型
"SERIALNUMBER" 磁盘序列号
"SHARENAME"    共享名称
"VOLUMENAME"   磁盘卷标
|;
(Defun vldos-driveinfo (Drv Key / pos rtn)
  (if (/= (type key) 'STR)
    (setq rtn (vldos-alldriveinfo drv))
    (if (setq pos (vl-position
      (setq key (strcase key))
      (list "TOTALSIZE"     "FREESPACE"
     "DRIVETYPE"     "FILESYSTEM"
     "SERIALNUMBER"    "SHARENAME"
     "VOLUMENAME"
    )
    )
 )
      (setq rtn (nth pos (vldos-alldriveinfo drv)))
    )
  )
  rtn
)

 ;|  返回磁盘的所有信息
用法: (vldos-alldriveinfo DriveLetter[STRING])
  参数1: 盘符 例如: "C:"
说明:
    返回磁盘的所有信息
返回值:
[成功]: 磁盘的所有信息
[失败]: NIL
|;
(Defun vldos-alldriveinfo (Drv / DrvObj FilSys RetVal)
  (if (setq
 FilSys (vlax-get-or-create-object "Scripting.FileSystemObject")
      )
    (progn
      (setq RetVal
      (cond
        ((= (vlax-invoke FilSys "DriveExists" Drv) 0) 0)
        ((setq DrvObj (vlax-invoke FilSys "GetDrive" Drv))
  (cond
    ((= (vlax-get DrvObj "IsReady") 0) -1)
    ((list
       (/ (vlax-get-property DrvObj "TotalSize") 1000.0)
       (/ (vlax-get-property DrvObj "FreeSpace") 1000.0)
       (vlax-get-property DrvObj "DriveType")
       (vlax-get-property DrvObj "FileSystem")
       (vlax-get-property DrvObj "SerialNumber")
       (vlax-get-property DrvObj "ShareName")
       (vlax-get-property DrvObj "VolumeName")
     )
    )
  )
        )
      )
      )
      (if (EQUAL (TYPE DrvObj) 'vla-object)
 (vlax-release-object DrvObj)
      )
      (vlax-release-object FilSys)
    )
  )
  RetVal
)

 ;|  返回文件的特定信息
用法: (vldos-fileinfo Filename[STRING] key[STRING])
  参数1: 文件全路径名
  参数2: 所需文件信息的字符串
说明:
    返回文件的特定信息
返回值:
[成功]: 文件的特定信息
[失败]: NIL
所需文件信息的字符串
"DATECREATED"         创建日期
"DATELASTMODIFIED"    修改日期
"DATELASTACCESSED"    最后一次访问时间
"TYPE"                文件类型
"SIZE"                文件大小
"ATTRIBUTES"          文件属性
|;
(Defun vldos-fileinfo (Drv Key / pos rtn)
  (if (/= (type key) 'STR)
    (setq rtn (vldos-allfileinfo drv))
    (if (setq pos (vl-position
      (setq key (strcase key))
      (list "DATECREATED"       "DATELASTMODIFIED"
     "DATELASTACCESSED"  "TYPE"
     "SIZE"       "ATTRIBUTES"
    )
    )
 )
      (setq rtn (nth pos (vldos-allfileinfo drv)))
    )
  )
  rtn
)

 ;|  返回文件的所有信息

;;改了一下
 ;|  返回磁盤的所有信息
用法: (vldos-alldriveinfo DriveLetter[STRING])
  參數1: 盤符 例如: "C:"
說明:
    返回磁盤的所有信息
返回值:
[成功]: 磁盤的所有信息
[失敗]: NIL
|;
(defun VLDOS-ALLDRIVEINFO (DRV / DRVOBJ FILSYS RETVAL)
  (if (setq
 FILSYS (vlax-get-or-create-object "Scripting.FileSystemObject")
      )
    (progn
      (setq RETVAL
      (cond
        ((= (vlax-invoke FILSYS "DriveExists" DRV) 0) 0)
        ((setq DRVOBJ (vlax-invoke FILSYS "GetDrive" DRV))
  (cond
    ((= (vlax-get DRVOBJ "IsReady") 0) -1)
    ((list
       (/ (vlax-get DRVOBJ "TotalSize") 1000.0)
       (/ (vlax-get DRVOBJ "FreeSpace") 1000.0)
       (vlax-get DRVOBJ "DriveType")
       (vlax-get DRVOBJ "FileSystem")
       (vlax-get DRVOBJ "SerialNumber")
       (vlax-get DRVOBJ "ShareName")
       (vlax-get DRVOBJ "VolumeName")
     )
    )
  )
        )
      )
      )
      (if (equal (type DRVOBJ) 'VLA-OBJECT)
 (vlax-release-object DRVOBJ)
      )
      (vlax-release-object FILSYS)
    )
  )
  RETVAL
)

 ;|  读文本文件到表 (快于 AutoLISP read-line函数)
用法: (vldos-readfile FilenameToRead[STRING])
  参数1: 文本文件全路径名. (包括后缀名)
        只有文本文件才能返回正确结果.
说明:
    读文本文件到表
返回值:
[成功]: 返回包括文件内容的表
[失败]: NIL
|;
(Defun vldos-readfile
       (Fil / string->list FilObj FilPth FilSys OpnFil All)
  (Defun string->list (String / ID Rtn)
    (if (null (setq ID (vl-string-search "\r\n" String)))
      (setq Rtn (list String))
      (progn
 (while ID
   (setq Rtn    (cons (substr String 1 ID) Rtn)
  String (substr String (+ 3 ID))
  ID     (vl-string-search "\r\n" String)
   )
 )
 (setq Rtn (reverse (cons String Rtn)))
      )
    )
    Rtn
  )
  (if (AND (setq FilPth (findfile Fil))
    (setq FilSys (vlax-create-object "Scripting.FileSystemObject"))
      )
    (progn
      (setq FilObj (vlax-invoke FilSys "GetFile" FilPth)
     OpnFil (vlax-invoke FilObj "OpenAsTextStream" 1 0)
     All    (string->list (vlax-invoke OpnFil "readall"))
      )
      (vlax-invoke OpnFil "Close")
      (vlax-release-object OpnFil)
      (vlax-release-object FilObj)
      (vlax-release-object FilSys)
    )
  )
  All
)
 ;|  将字符串或表写入文件 (快于 AutoLISP write-line函数)
用法: (vldos-writefile FileNameString[STRING] ContentStringList[LIST] ModeFlag[BOOLEAN])
        (vldos-writefile FileNameString[STRING] ContentString[STRING] ModeFlag[BOOLEAN])
  参数1: 文本文件全路径名. (包括后缀名)
  参数2: 要写入文件的字符串或表
  参数3: 最加或覆盖标志. nil 最加, T 覆盖
说明:
    将字符串或表写入文件
返回值:
[成功]: 文本文件全路径名.
[失败]: NIL
|;
(Defun vldos-writefile
         (Fil   TXT     Mode      /
   list->string     FilObj    FilPth
   FilSys   OpnFil    Line
         )
  (Defun list->string (slist / line rtn)
    (if (= (type slist) 'str)
      (setq rtn slist)
      (progn
 (setq rtn "")
 (foreach line slist
   (if (= rtn "")
     (setq rtn line)
     (setq rtn (strcat rtn "\r\n" line))
   )
 )
      )
    )
    rtn
  )
  (if TXT
    (progn
      (if (and Mode (findfile Fil))
 (vl-file-delete Fil)
      )
      (if (setq FilSys (vlax-create-object "Scripting.FileSystemObject"))
 (progn
   (if (null (setq FilPth (findfile Fil)))
     (setq OpnFil (vlax-invoke-method
      FilSys "CreateTextFile" Fil 0 0)
     )
     (setq FilObj (vlax-invoke FilSys "GetFile" FilPth)
    OpnFil (vlax-invoke FilObj "OpenAsTextStream" 8 0)
     )
   )
   (if OpnFil
     (progn
;;; VBA WinScript data forReading = 1, forWriting = 2, forAppending = 8;
;;; TristateUseDefault, TristateTrue, TristateFalse (-2, -1, 0)
;;;TristateUseDefault (-2) Opens the file using the system default.
;;;TristateTrue (-1) Open the file as Unicode.
;;;TristateFalse (0) Open the file as ASCII.
       (vlax-invoke OpnFil "Write" (list->string TXT))
       (vlax-invoke OpnFil "Close")
       (vlax-release-object OpnFil)
       (if (= (type FilObj) 'vla-object)
  (vlax-release-object FilObj)
       )
       (vlax-release-object FilSys)
     )
   )
 )
      )
      (if (setq Filpth (findfile Fil))
 (setq FilPth (vldos-formatpath filpth))
      )
    )
  )
  filpth
)
 ;|  目录浏览对话框
用法: (vldos-browsedir PromptString[STRING])
        (vldos-writefile NIL)
  参数1: 提示字符串, 如果是 nil, 缺省为 "Select Folder"
说明:
    显示目录浏览对话框
返回值:
[成功]: 返回所选目录路径. 如果用户选择取消, 返回 NIL
[失败]: NIL
|;
(Defun vldos-browsedir (msg / WinShell shFolder path catchit rtn)
  (if (null MSG)
    (setq MSG "Select folder")
  )
  (if (setq winshell (vlax-create-object "Shell.Application"))
    (progn
      (setq shFolder
       (vlax-invoke-method WinShell 'BrowseForFolder 0 msg 1)
     catchit
       (vl-catch-all-apply
         '(lambda ()
     (setq shFolder (vlax-get-property shFolder 'self))
     (setq path (vlax-get-property shFolder 'path))
   )
       )
      )
      (vlax-release-object shFolder)
      (vlax-release-object winshell)
      (if (vl-catch-all-error-p catchit)
 (setq rtn nil)
 (setq rtn (vldos-formatpath path))
      )
    )
  )
  rtn
)
 ;|  显示 windows 的确认对话框包括图标和可选按钮
用法: (vldos-msgbox TitleString[STRING] IconType[STRING/REAL] MessageString[STRING] ButtonType[INT])
  参数1: 标题字符串, 如果是 nil, 缺省为 "Message"
  参数2: 图标类型字符串或整数值. 如果是字符串, 只有第一个字符串有效.
  参数3: 消息字符串, 如果是 nil, 缺省为 "Message HERE"
  参数4: 按钮类型整数值.
说明:
    显示 windows 的确认对话框
返回值:
[成功]: 所选按钮的值
[失败]: NIL
;;;按钮
;;;0  OK
;;;1  OK and Cancel
;;;2  Abort, Retry, and Ignore
;;;3  Yes, No, Cancel
;;;4  Yes and No
;;;5  Retry and Cancel
;;;图标类型
;;;16 [X] Stop Mark icon
;;;32 [?] Question Mark icon
;;;48 [!] Exclamation Mark icon
;;;64 [i] Information Mark icon
;;; 返回值所代表的按钮
;;;1  OK button
;;;2  Cancel button
;;;3  Abort button
;;;4  Retry button
;;;5  Ignore button
;;;6  Yes button
;;;7  No button
|;
(Defun vldos-msgbox (TITLE ICON MSG BTNS / IDT sys BTN)
  (if (setq sys (vlax-get-or-create-object "WScript.Shell"))
    (progn
      (if (not (equal (type TITLE) 'STR))
 (setq TITLE "Message")
      )
      (cond ((null ICON) (setq ICON 64))
     ((= (type ICON) 'STR)
      (setq ICON (substr (strcase ICON) 1 1)
     IDT (list (cons "X" 16)
         (cons "?" 32)
         (cons "!" 48)
         (cons "i" 64)
   )
     ICON (cdr (assoc ICON IDT))
      )
      (if (null ICON)
        (setq ICON 64)
      )
     )
     ((= (type ICON) 'INT)
      (if (null (member ICON (list 16 32 48 64)))
        (setq ICON 64)
      )
      (t (setq ICON 64))
     )
      )
      (if (not (equal (type MSG) 'STR))
 (setq MSG "Message HERE")
      )
      (cond ((null BTNS) (setq BTNS 0))
     ((= (type BTNS) 'INT)
      (if (or (< BTNS 0) (> BTNS 5))
        (setq BTNS 0)
      )
     )
     (t (setq BTNS 0))
      )
      (setq
 BTN (vlax-invoke-method sys 'popup MSG 0 TITLE (+ ICON BTNS))
      )
      (vlax-release-object sys)
    )
  )
  BTN
)
 ;|  当前目录文件搜索. 类似于 DIR /S 命令.
用法: (vldos-findfile FilenameFullPathString[STRING])
        (vldos-writefile NIL)
  参数1: 文件名. 可以包括扩展符 ("*" and "?").
        如果文件名描述符为 nil ,返回所有的文件包括子目录。
说明:
    当前目录文件搜索
返回值:
[成功]: 包括所有符合条件的文件名.
[失败]: NIL
|;
(Defun vldos-findfile (Filename     /   string->list
         getallfiles  allfiles  path
        )
  (Defun string->list (String / ID Rtn)
    (if (null (setq ID (vl-string-search ";" String)))
      (setq Rtn (list String))
      (progn
 (while ID
   (setq Rtn    (cons (substr String 1 ID) Rtn)
  String (substr String (+ 2 ID))
  ID     (vl-string-search ";" String)
   )
 )
 (setq Rtn (reverse (cons String Rtn)))
      )
    )
    Rtn
  )
  (Defun getallfiles (loc ext / path files rtn)
    (cond
      ((= loc "")
       (foreach path (string->list (getvar "acadprefix"))
  (setq rtn (append rtn (getallfiles path ext)))
       )
      )
      ((vl-file-directory-p loc)
       (if (null (wcmatch loc "*\\"))
  (setq loc (strcat loc "\\"))
       )
       (foreach files (vl-directory-files loc ext)
  (setq rtn (cons (vldos-formatpath (strcat loc files)) rtn))
       )
       (foreach path (vl-directory-files loc nil -1)
  (if (and (/= path ".")
    (/= path "..")
      )
    (setq rtn (append rtn (getallfiles (strcat loc path) ext)))
  )
       )
      )
    )
    rtn
  )
  (setq path  (vldos-formatpath (vl-filename-directory Filename))
 Filename (substr Filename (1+ (strlen path)))
 allfiles (acad_strlsort (getallfiles path filename))
  )
  allfiles
)
 ;| 合并两个文本文件
用法: (vldos-merge MergeBaseFilenameString[STRING] MergeFilenameString[STRING] EraseMergefileFlag[BOOLEAN])
  参数1: 基文件名
  参数2: 将被合并的文件名
  参数3: 是否删除被合并文件的标志.
说明:
    合并两个文件为一个e
返回值:
[成功]: 合并后的文件名
[失败]: NIL
|;
(Defun vldos-merge (file1 File2 Erase / rtn)
  (if (and (setq file1 (findfile file1))
    (setq file2 (findfile file2))
      )
    (progn
      (vldos-writefile file1 (vldos-readfile file2) nil)
      (if Erase
 (vl-file-delete File2)
      )
      (setq rtn (findfile file1))
    )
  )
  rtn
)
 ;| 通过IE 显示一个 HTML 字符串
用法: (vldos-text->ie ContentString[STRING])
  参数1: 要显示的字符串或字符串表
说明:
    传送数据至新打开的IE窗口
返回值:
[成功]: 包括字符串的新打开的IE窗口
[失败]: NIL
|;
(Defun vldos-text->ie (TXT / list->string ie ln doc)
  (if (= (type TXT) 'STR)
    (setq TXT (list TXT))
  )
  (if (setq ie (vlax-create-object "InternetExplorer.Application"))
    (progn
      (vlax-put-property ie 'menubar 0)
      (vlax-put-property ie 'toolbar 0)
      (vla-put-visible ie t)
      (vlax-invoke-method ie 'navigate "about :blank")
      (setq doc (vlax-get-property ie 'document))
      (foreach ln TXT
 (vlax-invoke-method doc 'writeln ln "")
      )
      (vlax-invoke-method doc 'close)
      (vlax-release-object doc)
      (vlax-release-object ie)
    )
  )
)
 ;| 显示时间/日期对话框
用法: (vldos-time)
说明:
    通过VLisp调用时间/日期对话框
返回值:
[成功]: 显示时间/日期对话框
[失败]: NIL
|;
(Defun vldos-time (/ sys)
  (if (setq sys (vlax-create-object "Shell.Application"))
    (progn
      (vlax-invoke-method sys 'settime)
      (vlax-release-object sys)
    )
  )
)

 

posted on 2008-03-10 14:39 深藏记忆 阅读(1311) 评论(1)  编辑  收藏 所属分类: Vlisp之韵

FeedBack:
# re: 磁盘操作函数.LSP[未登录]
2010-07-08 18:52 | xx
厉害  回复  更多评论
  

飘过是缘,相识最真

订阅到抓虾
google reader
gougou


点击这里给我发消息


<2010年7月>
27282930123
45678910
11121314151617
18192021222324
25262728293031
1234567

常用链接

留言簿(5)

随笔分类

随笔档案

文章分类

文章档案

相册

收藏夹

八面来息

天天充电

同行者

积分与排名

  • 积分 - 58689
  • 排名 - 61

最新评论

阅读排行榜

评论排行榜