sharpooth 发表于 2022-7-6 11:11:26

vlax创建对象???

大家好,
 
1、我如何理解哪些课程可以上:
 
(vlax创建对象“WbemScripting.SWbemLocator”)
(vlax创建对象“Scripting.FileSystemObject”)
....
等等
 
2、有没有办法得到真正的硬盘号?
 
 
 
谢谢

rkmcswain 发表于 2022-7-6 11:16:05

 
你是说硬盘的序列号吗?
如果是这样,使用DOSLIB的(dos\u serialno)是一种选择。

JohnM 发表于 2022-7-6 11:19:01

试试这个
调用它并传递一个驱动器号,如“C”
注意:驱动器序列号由操作系统分配,因此如果重新格式化驱动器,序列号将不同。
 

(defun VxGetDriveInfos (Drv / DrvObj FilSys RetVal)
(setq FilSys (vlax-create-object "Scripting.FileSystemObject")
      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 DrvObj (vlax-release-object DrvObj))
(vlax-release-object FilSys)
RetVal
)

sharpooth 发表于 2022-7-6 11:23:13

当我使用下一个代码时
 

(setq bbb (vlax-get-property (vlax-invoke (vlax-create-object "Scripting.FileSystemObject") 'Getdrive "c:") "SerialNumber" ))

 
我收到“142782703”,但这不是正确的硬盘序列号
 

sharpooth 发表于 2022-7-6 11:26:38

 
如何使用此DOSLIB?

alanjt 发表于 2022-7-6 11:28:02

....... 
多斯利卜

Lee Mac 发表于 2022-7-6 11:30:44

另一个:
 

(defun DiskDriveSerial (/ WMI Serv DiskD item prop ser)
(vl-load-com)
;; Lee Mac~13.05.10

(setq WMI    (vlax-create-object "WbemScripting.SWbemLocator")
       Serv   (vlax-invoke WMI'ConnectServer nil nil nil nil nil nil nil nil)
       DiskD(vlax-invoke Serv 'ExecQuery "Select SerialNumber from Win32_DiskDrive"))
      
(vlax-for item DiskD
   (vlax-for prop (vlax-get item 'Properties_)
   (if (eq "SerialNumber" (vlax-get prop 'Name))
       (setq ser (vlax-get prop 'Value))
   )
   )
)

(mapcar 'vlax-release-object (list DiskD Serv wmi))

ser)

alanjt 发表于 2022-7-6 11:35:25

李,你的意见对我来说是零。我想知道这是否与你运行Vista有关。
 
这是我划出的一个,它使用了与上面发布的方法基本相同的方法。
 
我很好奇你的返回是否与你机器上的这个相同。
 
另一件奇怪的事是,我发布的返回的数字与DosLib返回的不同。
如。
Command: (driveserial "c")
150345461
Command: (dos_serialno "c")
"08F616F5"

Lee Mac 发表于 2022-7-6 11:38:56

我不知道为什么它会返回零。。。也许另一位大师可以加入。。。
 
至于您的另一个查询,请记住DriveObject的SerialNumber属性将以十进制返回,DosLib可能以十六进制返回?
 

(defun DiskDriveSerial ( Drv / toBase Scr ser )

(defun toBase ( str from to / -> <- toChar )
   ;; Lee Mac~01.05.10

   (defun -> ( n / b x )
   (if (<= to n)
       (strcat (-> (/ n to)) (-> (rem n to)))
       (toChar n)
   )
   )

   (defun <- ( l )
   (if l
       (+ (* from (<- (cdr l))) (car l)) 0
   )
   )

   (defun toChar ( n ) (chr (+ n (if (< n 10) 48 55))))

   (->
   (<-
       (mapcar
         (function
         (lambda ( x )
             (- x (if (< x 58) 48 55))
         )
         )
         (reverse
         (vl-string->list str)
         )
       )
   )
   )
)

(setq Scr (vlax-create-object "Scripting.FileSystemObject")
       ser (vlax-get (vlax-invoke Scr 'Getdrive Drv) 'SerialNumber))

(vlax-release-object Scr)

(toBase (vl-princ-to-string ser) 10 16)
)

alanjt 发表于 2022-7-6 11:41:48

这将仅限于为序列号分配的大小
页: [1] 2
查看完整版本: vlax创建对象???