xianaihua 发表于 2009-11-6 18:22:00

获取CPU序列号


研究了一些朋友的程序,写了一个获得CPU序列号的程序,在几个机子上测试还行。


;;获取CPU序列号.
(defun get_cpu_id (/ Vlist VObj lcom lExecQuery item)
(vl-load-com)
(setq Vlist '())
(if (setq VObj (vlax-create-object "wbemscripting.swbemlocator"))
    (progn
      (SETQ lcom (VLAX-INVOKE
   VObj       'ConnectServer   "."
   "\\root\\cimv2"""   ""
   ""       ""128   nil
    ) ;_ 结束VLAX-INVOKE
      ) ;_ 结束SETQ
      (setq lExecQuery
      (vlax-invoke
      lcom
      'ExecQuery
      ;;"Select * From Win32_BIOS"
      "Select * from Win32_Processor"
      ) ;_ 结束vlax-invoke
      ) ;_ 结束setq
      (vlax-for item lExecQuery
(setq Vlist (vlax-get item 'ProcessorId) ;_ 结束cons
) ;_ 结束setq
      ) ;_ 结束vlax-for
      (vlax-release-object lExecQuery)
      (vlax-release-object lcom)
      (vlax-release-object Vobj)
    )
)
Vlist
)
(setq sn (get_cpu_id))

高级用户 发表于 2009-11-7 20:41:00

<p>读cpu的论坛里早就有了,就是没有读硬盘物理序列号的,不知楼主能搞出来不</p><p>(defun CpuID (/ *wsc str)<br/>&nbsp; (setq str<br/>&nbsp;&nbsp;&nbsp; "Set objSWbemObject = GetObject(\"winmgmts:Win32_Processor.DeviceID='cpu0'\")<br/>&nbsp;&nbsp;&nbsp; ret = objSWbemObject.ProcessorId"<br/>&nbsp; )<br/>&nbsp; (setq *wsc (vlax-create-object "ScriptControl"))<br/>&nbsp; (vlax-put *wsc 'language "vbs")<br/>&nbsp; (vlax-invoke *wsc 'ExecuteStatement str)<br/>&nbsp; (vlax-invoke *wsc 'eval "ret")<br/>)</p>

xianaihua 发表于 2009-11-7 21:01:00

楼上朋友提供的好像是VBS获取序列号的方法,也不错

wangph 发表于 2009-11-8 09:53:00

<p>楼上的方法都没法读取CPU的<font color="#f73809">物理</font>序列号,不知哪有办法?</p>

龙龙仔 发表于 2009-11-9 12:29:00

高级用户发表于2009-11-7 20:41:00static/image/common/back.gif读cpu的论坛里早就有了,就是没有读硬盘物理序列号的,不知楼主能搞出来不

<p>;;n年前就發過<br/>;;但它與(dos_serialno )的值不同==&gt;16進制<br/>;; By LUCAS(龍龍仔)<br/>;; FIND_SERIALNUMBER<br/>;; Returns of Drive SerialNumber<br/>;; Arguments :<br/>;; Drive = "C:" <br/>;; Notes: Requires ScrRun.dll.<br/>;; USAGE: (FIND_SERIALNUMBER "D:")</p><p>(defun FIND_SERIALNUMBER (DRIVE / FILSYS VAL)<br/>&nbsp; (setq FILSYS (vlax-create-object "Scripting.FileSystemObject"))<br/>&nbsp; (setq VAL (vlax-invoke FILSYS "GetDrive" DRIVE))<br/>&nbsp; (setq&nbsp;VAL (vl-catch-all-apply<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'vlax-get<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (list VAL "SerialNumber")<br/>&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; (vlax-release-object FILSYS)<br/>&nbsp; (if (vl-catch-all-error-p VAL)<br/>&nbsp;&nbsp;&nbsp; (setq VAL NIL)<br/>&nbsp;&nbsp;&nbsp; VAL<br/>&nbsp; )<br/>)</p>

tyxdd 发表于 2009-11-9 12:54:00

<p>第一个帖子程序有错:</p><p>_1$ <br/>; 错误: SWbemLocator: 无效参数</p><p>windows 2000 + acad2006</p><p></p>

xianaihua 发表于 2009-11-9 13:03:00

龙仔的程序不是获得硬盘物理序列号,而获得的是格式化后自动生成的序列号,经测试好像也不对

xianaihua 发表于 2009-11-9 13:05:00

tyxdd发表于2009-11-9 12:54:00static/image/common/back.gif第一个帖子程序有错:_1$ ; 错误: SWbemLocator: 无效参数windows 2000 + acad2006

<p>程序在XP下,多个机子上测试没问题,在2000下还没测试</p>

xianaihua 发表于 2009-11-9 13:09:00

获取硬盘物理序列号在论坛上有:<a href="http://www.mjtd.com/Functions/ArticleShow.asp?ArticleID=54">http://www.mjtd.com/Functions/ArticleShow.asp?ArticleID=54</a>

高级用户 发表于 2009-11-9 14:22:00

xianaihua发表于2009-11-9 13:09:00static/image/common/back.gif获取硬盘物理序列号在论坛上有:http://www.mjtd.com/Functions/ArticleShow.asp?ArticleID=54

<p></p><p>我用楼上的程序获得的数据是((<a href="file://./PHYSICALDRIVE0">\\.\PHYSICALDRIVE0</a> nil) (<a href="file://./PHYSICALDRIVE1">\\.\PHYSICALDRIVE1</a> nil) (<a href="file://./PHYSICALDRIVE2">\\.\PHYSICALDRIVE2</a>
                <br/>nil) (<a href="file://./PHYSICALDRIVE3">\\.\PHYSICALDRIVE3</a> nil) (<a href="file://./PHYSICALDRIVE4">\\.\PHYSICALDRIVE4</a> nil)),并不是真正序列号</p><p>我用优化大师软件看的序列号是4MT10LL5</p><p>&nbsp;</p>
页: [1] 2 3
查看完整版本: 获取CPU序列号