乐筑天下

搜索
欢迎各位开发者和用户入驻本平台 尊重版权,从我做起,拒绝盗版,拒绝倒卖 签到、发布资源、邀请好友注册,可以获得银币 请注意保管好自己的密码,避免账户资金被盗
查看: 65|回复: 19

[编程交流] vlax创建对象???

[复制链接]

16

主题

64

帖子

48

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 11:11:26 | 显示全部楼层 |阅读模式
大家好,
 
1、我如何理解哪些课程可以上:
 
(vlax创建对象“WbemScripting.SWbemLocator”)
(vlax创建对象“Scripting.FileSystemObject”)
....
等等
 
2、有没有办法得到真正的硬盘号?
 
 
 
谢谢
回复

使用道具 举报

24

主题

1265

帖子

1028

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
362
发表于 2022-7-6 11:16:05 | 显示全部楼层
 
你是说硬盘的序列号吗?
如果是这样,使用DOSLIB的(dos\u serialno)是一种选择。
回复

使用道具 举报

4

主题

327

帖子

324

银币

初来乍到

Rank: 1

铜币
19
发表于 2022-7-6 11:19:01 | 显示全部楼层
试试这个
调用它并传递一个驱动器号,如“C”
注意:驱动器序列号由操作系统分配,因此如果重新格式化驱动器,序列号将不同。
 
  1. [font=Times New Roman][font=Times New Roman](defun VxGetDriveInfos (Drv / DrvObj FilSys RetVal) [/font]
  2. [font=Times New Roman](setq FilSys (vlax-create-object "Scripting.FileSystemObject") [/font]
  3. [font=Times New Roman]      RetVal (cond [/font]
  4. [font=Times New Roman]              ((= (vlax-invoke FilSys "DriveExists" Drv) 0) 0) [/font]
  5. [font=Times New Roman]              ((setq DrvObj (vlax-invoke FilSys "GetDrive" Drv)) [/font]
  6. [font=Times New Roman]               (cond [/font]
  7. [font=Times New Roman]                ((= (vlax-get DrvObj "IsReady") 0) -1) [/font]
  8. [font=Times New Roman]                ((list [/font]
  9. [font=Times New Roman]                  (/(vlax-get DrvObj "TotalSize") 1000.0) [/font]
  10. [font=Times New Roman]                  (/(vlax-get DrvObj "FreeSpace") 1000.0) [/font]
  11. [font=Times New Roman]                  (vlax-get DrvObj "DriveType") [/font]
  12. [font=Times New Roman]                  (vlax-get DrvObj "FileSystem") [/font]
  13. [font=Times New Roman]                  (vlax-get DrvObj "SerialNumber") [/font]
  14. [font=Times New Roman]                  (vlax-get DrvObj "ShareName") [/font]
  15. [font=Times New Roman]                  (vlax-get DrvObj "VolumeName") [/font]
  16. [font=Times New Roman]                 ) [/font]
  17. [font=Times New Roman]                ) [/font]
  18. [font=Times New Roman]               ) [/font]
  19. [font=Times New Roman]              ) [/font]
  20. [font=Times New Roman]             ) [/font]
  21. [font=Times New Roman]) [/font]
  22. [font=Times New Roman](if DrvObj (vlax-release-object DrvObj)) [/font]
  23. [font=Times New Roman](vlax-release-object FilSys)  [/font]
  24. [font=Times New Roman]RetVal [/font]
  25. [font=Times New Roman]) [/font]
  26. [/font]
回复

使用道具 举报

16

主题

64

帖子

48

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 11:23:13 | 显示全部楼层
当我使用下一个代码时
 
  1. (setq bbb (vlax-get-property (vlax-invoke (vlax-create-object "Scripting.FileSystemObject") 'Getdrive "c:") "SerialNumber" ))

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

使用道具 举报

16

主题

64

帖子

48

银币

初露锋芒

Rank: 3Rank: 3Rank: 3

铜币
80
发表于 2022-7-6 11:26:38 | 显示全部楼层
 
如何使用此DOSLIB?
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 11:28:02 | 显示全部楼层
....... 
多斯利卜
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:30:44 | 显示全部楼层
另一个:
 
  1. (defun DiskDriveSerial (/ WMI Serv DiskD item prop ser)
  2. (vl-load-com)
  3. ;; Lee Mac  ~  13.05.10
  4. (setq WMI    (vlax-create-object "WbemScripting.SWbemLocator")
  5.        Serv   (vlax-invoke WMI  'ConnectServer nil nil nil nil nil nil nil nil)
  6.        DiskD  (vlax-invoke Serv 'ExecQuery "Select SerialNumber from Win32_DiskDrive"))
  7.       
  8. (vlax-for item DiskD
  9.    (vlax-for prop (vlax-get item 'Properties_)
  10.      (if (eq "SerialNumber" (vlax-get prop 'Name))
  11.        (setq ser (vlax-get prop 'Value))
  12.      )
  13.    )
  14. )
  15. (mapcar 'vlax-release-object (list DiskD Serv wmi))
  16. ser)
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 11:35:25 | 显示全部楼层
李,你的意见对我来说是零。我想知道这是否与你运行Vista有关。
 
这是我划出的一个,它使用了与上面发布的方法基本相同的方法。
 
我很好奇你的返回是否与你机器上的这个相同。
 
另一件奇怪的事是,我发布的返回的数字与DosLib返回的不同。
如。
  1. Command: (driveserial "c")
  2. 150345461
  3. Command: (dos_serialno "c")
  4. "08F616F5"
回复

使用道具 举报

114

主题

1万

帖子

1万

银币

中流砥柱

Rank: 25

铜币
543
发表于 2022-7-6 11:38:56 | 显示全部楼层
我不知道为什么它会返回零。。。也许另一位大师可以加入。。。
 
至于您的另一个查询,请记住DriveObject的SerialNumber属性将以十进制返回,DosLib可能以十六进制返回?
 
  1. (defun DiskDriveSerial ( Drv / toBase Scr ser )
  2. (defun toBase ( str from to / -> <- toChar )
  3.    ;; Lee Mac  ~  01.05.10
  4.    (defun -> ( n / b x )
  5.      (if (<= to n)
  6.        (strcat (-> (/ n to)) (-> (rem n to)))
  7.        (toChar n)
  8.      )
  9.    )
  10.    (defun <- ( l )
  11.      (if l
  12.        (+ (* from (<- (cdr l))) (car l)) 0
  13.      )
  14.    )
  15.    (defun toChar ( n ) (chr (+ n (if (< n 10) 48 55))))
  16.    (->
  17.      (<-
  18.        (mapcar
  19.          (function
  20.            (lambda ( x )
  21.              (- x (if (< x 58) 48 55))
  22.            )
  23.          )
  24.          (reverse
  25.            (vl-string->list str)
  26.          )
  27.        )
  28.      )
  29.    )
  30. )
  31. (setq Scr (vlax-create-object "Scripting.FileSystemObject")
  32.        ser (vlax-get (vlax-invoke Scr 'Getdrive Drv) 'SerialNumber))
  33. (vlax-release-object Scr)
  34. (toBase (vl-princ-to-string ser) 10 16)
  35. )
回复

使用道具 举报

54

主题

3755

帖子

3583

银币

后起之秀

Rank: 20Rank: 20Rank: 20Rank: 20

铜币
438
发表于 2022-7-6 11:41:48 | 显示全部楼层
这将仅限于为序列号分配的大小
回复

使用道具 举报

发表回复

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

本版积分规则

  • 微信公众平台

  • 扫描访问手机版

  • 点击图片下载手机App

QQ|关于我们|小黑屋|乐筑天下 繁体中文

GMT+8, 2025-3-6 11:15 , Processed in 1.091325 second(s), 72 queries .

© 2020-2025 乐筑天下

联系客服 关注微信 帮助中心 下载APP 返回顶部 返回列表