明经CAD社区

 找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 5407|回复: 10

读取电脑硬盘物理序列号的问题

[复制链接]
发表于 2006-11-5 14:06:00 | 显示全部楼层 |阅读模式

网上有一个可以读取电脑硬盘物理序列号的函数,可当电脑同时有2个硬盘时,或当电脑插上一个移动硬盘时,就读不出来了,请问该如何修改,望高手指教。

;;在XP下测试通过
(defun phyhar (/ ret serx objw lccon lox)
  (vl-load-com)
  (setq serx '())
  (if (SETQ OBJW (VLAX-CREATE-OBJECT "wbemScripting.SwbemLocator"))
    (progn
      (SETQ lccon (VLAX-INVOKE
    OBJW       'ConnectServer      "."
    "\\root\\cimv2"   ""      ""
    ""        ""   128      nil
   )
      )
      (setq lox (vlax-invoke
  lccon
  'ExecQuery
  "Select SerialNumber,Tag from Win32_PhysicalMedia"
)
      )
      (vlax-for item lox
(setq serx (cons (list (vlax-get item 'Tag)
       (vlax-get
item
'SerialNumber
       )
)
serx
   )
)
      )
      (vlax-release-object lox)
      (vlax-release-object lccon)
      (vlax-release-object objW)
    )
  )
  (princ (reverse serx))
  (princ)
)

"觉得好,就打赏"
还没有人打赏,支持一下
 楼主| 发表于 2006-11-10 17:56:00 | 显示全部楼层
求高手指点一下吧
发表于 2006-11-10 20:05:00 | 显示全部楼层

Please try following example:

(Defun C:TT1 (/ code code Drives lstSer StrDrive SerialNumber)
  (vl-load-com)
  (setq code "C")
  (setq FSO    (vlax-create-object "Scripting.FileSystemObject")
 Drives (vlax-get-property FSO "Drives")
  )
  (setq lstSer '())
  ;; iterator the HardDisk for the SerialNumber .
  (repeat (vlax-get-property Drives "Count")
    (setq StrDrive (strcat code ":"))
    (if (and (setq Drive (vl-catch-all-apply 'vlax-get-property (list Drives "Item" StrDrive)))
      (not (vl-catch-all-error-p Drive))
      (vlax-property-available-p Drive "DriveType")
      (equal (vlax-get-property Drive "DriveType") 2)
      (vlax-property-available-p Drive "SerialNumber")
      (setq SerialNumber (vlax-get-property Drive "SerialNumber"))
 )
      (setq SerialNumber (rtos SerialNumber 2 0)
     lstSer  (cons (list StrDrive SerialNumber) lstSer)
      )
    )
    (setq code (chr (1+ (ascii code))))
  )
  ;; relese object  .
  (vl-catch-all-apply 'vlax-release-object (list FSO))
  (vl-catch-all-apply 'vlax-release-object (list Drives))
  ;; return the value .
  (princ(reverse lstSer))
)

发表于 2006-11-10 20:25:00 | 显示全部楼层
好高深的问题,我还没学到那个步,什么时候用到硬盘物理序列号呢?
发表于 2006-11-10 21:18:00 | 显示全部楼层

这个其实也是还算相对简单的。连 Help 文档中都有,找到过了没有?

还有DBX,ADO,DAO,ODBC等东西都可以用LISP做呢...

一步一步的来,明年这个时候我就相信你能做这个东西,或者还要更早。

看得出你也是技术上的一个狂热分子!

发表于 2006-11-10 21:29:00 | 显示全部楼层
哈哈,谢谢Huaiyu大侠的指教,你说的我只会ADO其它都没有没会,这里是真是个好地方!
 楼主| 发表于 2006-11-11 09:20:00 | 显示全部楼层
这个程序我运行了一下,结果重复了一次,但我想要的是硬盘的物理序列号,不是逻辑盘的序列号,请再指教。
发表于 2006-11-11 20:28:00 | 显示全部楼层
这个先在口袋,慢慢学习!
 楼主| 发表于 2006-11-12 14:06:00 | 显示全部楼层

我试验出来了,但是DELL有批机子是读不出的,不知道是不是硬盘本身原因。

 

发表于 2006-11-12 16:41:00 | 显示全部楼层

请楼主发上来让我们学习一下??

谢谢

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

本版积分规则

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

GMT+8, 2025-6-21 04:16 , Processed in 0.184923 second(s), 26 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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