solidbullet 发表于 2008-10-13 15:34:00

关于物理硬盘序列号

<p>为什么在WIN2000下不能使用方法 VLAX-METHOD 'CONNECTSERVER</p><p>请高手赐教</p><p>(defun phyhar (/ ret serx objw lccon lox)<br/>&nbsp; (vl-load-com)<br/>&nbsp; (setq serx '())<br/>&nbsp; (if (SETQ OBJW (VLAX-CREATE-OBJECT "wbemScripting.SwbemLocator"))<br/>&nbsp;&nbsp;&nbsp; (progn<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (SETQ lccon (VLAX-INVOKE<br/>&nbsp;&nbsp;&nbsp; OBJW&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; 'ConnectServer &nbsp;&nbsp;&nbsp;&nbsp; "."<br/>&nbsp;&nbsp;&nbsp; "\\root\\cimv2" &nbsp; "" &nbsp;&nbsp;&nbsp;&nbsp; ""<br/>&nbsp;&nbsp;&nbsp; "" &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; "" &nbsp; 128 &nbsp;&nbsp;&nbsp;&nbsp; nil<br/>&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (setq lox (vlax-invoke<br/>&nbsp; lccon<br/>&nbsp; 'ExecQuery<br/>&nbsp; "Select SerialNumber,Tag from Win32_PhysicalMedia"<br/>)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-for item lox<br/>(setq serx (cons (list (vlax-get item 'Tag)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-get<br/>item<br/>'SerialNumber<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>)<br/>serx<br/>&nbsp;&nbsp; )<br/>)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-release-object lox)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-release-object lccon)<br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (vlax-release-object objW)<br/>&nbsp;&nbsp;&nbsp; )<br/>&nbsp; )<br/>&nbsp; (princ (reverse serx))<br/>&nbsp; (princ)<br/>)</p><p></p><p></p><p></p>

baitang36 发表于 2022-5-2 13:36:46

(DEFUN WMIGETSREENRESOLUTION (/ ITEM METH1 METH2 S ITEMS WMI HR)
(VL-LOAD-COM)
(SETQ WMI (VLAX-CREATE-OBJECT "WbemScripting.SWbemLocator")
        METH1 (VLAX-INVOKE WMI 'CONNECTSERVER NIL NIL NIL NIL NIL NIL NIL NIL)
        METH2 (VLAX-INVOKE METH1 'EXECQUERY "Select * from Win32_VideoController")
        HR (VLAX-FOR ITEM METH2
          (SETQ ITEMS (LIST (VLAX-GET ITEM 'CURRENTHORIZONTALRESOLUTION)
          (VLAX-GET ITEM 'CURRENTVERTICALRESOLUTION ))))
)
(VLAX-RELEASE-OBJECT METH1)
(VLAX-RELEASE-OBJECT METH2)
(VLAX-RELEASE-OBJECT WMI)
HR
)
;;;
(defun WmiGetOsSerialNumber (/ item meth1 meth2 s serx wmi)
(vl-load-com)
(setq WMI (vlax-create-object "WbemScripting.SWbemLocator")
        meth1 (VLAX-INVOKE WMI 'ConnectServer nil nil nil nil nil nil nil nil)
        meth2 (vlax-invoke meth1 'ExecQuery "select SerialNumber from Win32_OperatingSystem")
        s (vlax-for item meth2 (setq serx (list (vlax-get item 'SerialNumber))))
)
(vlax-release-object meth1)
(vlax-release-object meth2)
(vlax-release-object wmi)
(car s)
)
;;;
(defun WmiGetOsCaption (/ item meth1 meth2 s serx wmi)
(vl-load-com)
(setq WMI (vlax-create-object "WbemScripting.SWbemLocator")
        meth1 (VLAX-INVOKE WMI 'ConnectServer nil nil nil nil nil nil nil nil)
        meth2 (vlax-invoke meth1 'ExecQuery "select Caption from Win32_OperatingSystem")
        s (vlax-for item meth2 (setq serx (list (vlax-get item 'Caption))))
)
(vlax-release-object meth1)
(vlax-release-object meth2)
(vlax-release-object wmi)
(car s)
)
;;;
(defun WmiTotalPhysicalMemory (/ item meth1 meth2 s serx wmi)
(vl-load-com)
(setq WMI (vlax-create-object "WbemScripting.SWbemLocator")
        meth1 (VLAX-INVOKE WMI 'ConnectServer nil nil nil nil nil nil nil nil)
        meth2 (vlax-invoke meth1 'ExecQuery "select TotalPhysicalMemory from Win32_LogicalMemoryConfiguration")
        s (vlax-for item meth2 (setq serx (list (vlax-get item 'TotalPhysicalMemory))))
)
(vlax-release-object meth1)
(vlax-release-object meth2)
(vlax-release-object wmi)
(strcat (itoa (fix (/ (car s) 1024))) " Mbytes")
)
;;;
(defun wmiMaxClockSpeed (/ item meth1 meth2 s serx wmi)
(vl-load-com)
(setq WMI (vlax-create-object "WbemScripting.SWbemLocator")
        meth1 (VLAX-INVOKE WMI 'ConnectServer nil nil nil nil nil nil nil nil)
        meth2 (vlax-invoke meth1 'ExecQuery "select MaxClockSpeed from Win32_Processor")
        s (vlax-for item meth2 (setq serx (list (vlax-get item 'MaxClockSpeed))))
)
(vlax-release-object meth1)
(vlax-release-object meth2)
(vlax-release-object wmi)
(strcat (itoa (car s)) " MHz")
)
;;;
(defun wmiProcessorType (/ item meth1 meth2 s serx wmi)
(vl-load-com)
(setq WMI (vlax-create-object "WbemScripting.SWbemLocator")
        meth1 (VLAX-INVOKE WMI 'ConnectServer nil nil nil nil nil nil nil nil)
        meth2 (vlax-invoke meth1 'ExecQuery "select Name from Win32_Processor")
        s (vlax-for item meth2 (setq serx (list (vlax-get item 'Name))))
)
(vlax-release-object meth1)
(vlax-release-object meth2)
(vlax-release-object wmi)
(car s)
)
;;;
(defun wmiProcessorType2 (/ item meth1 meth2 s serx wmi)
(vl-load-com)
(setq WMI (vlax-create-object "WbemScripting.SWbemLocator")
        meth1 (VLAX-INVOKE WMI 'ConnectServer nil nil nil nil nil nil nil nil)
        meth2 (vlax-invoke meth1 'ExecQuery "select DataWidth from Win32_Processor")
        s (vlax-for item meth2 (setq serx (list (vlax-get item 'DataWidth))))
)
(vlax-release-object meth1)
(vlax-release-object meth2)
(vlax-release-object wmi)
(car s)
)
;;;
(defun wmiProcessorType3 (/ item meth1 meth2 s serx wmi)
(vl-load-com)
(setq WMI (vlax-create-object "WbemScripting.SWbemLocator")
        meth1 (VLAX-INVOKE WMI 'ConnectServer nil nil nil nil nil nil nil nil)
        meth2 (vlax-invoke meth1 'ExecQuery "select Architecture from Win32_Processor")
        s (vlax-for item meth2 (setq serx (list (vlax-get item 'Architecture))))
)
(vlax-release-object meth1)
(vlax-release-object meth2)
(vlax-release-object wmi)
(car s)
)

baitang36 发表于 2022-5-2 12:04:58

本帖最后由 baitang36 于 2022-5-2 12:06 编辑

win10下试验是成功的。如果有多块硬盘,楼主的代码只能返回最后一块硬盘的物理序列号。我把它改了一下,让它返回所有硬盘物理序列号表。

(defun HDSerial        (/ wmi srv drv ser)
(SETQ SER NIL)
(vl-catch-all-apply
    (function
      (lambda ()
        (if
          (setq        wmi (vlax-create-object "WbemScripting.SWbemLocator")
                srv (vlax-invoke
                      wmi      'connectserver       nil          nil
                      nil      nil        nil       nil          nil
                      nil
                     ) ;_ vlax-invoke
                drv (vlax-invoke
                      srv
                      'execquery
                      "Select SerialNumber from Win32_DiskDrive"
                  ) ;_ vlax-invoke
          ) ;_ setq
           (vlax-for item drv
             (vlax-for prop (vlax-get item 'Properties_)
             (if (eq "SERIALNUMBER" (strcase (vlax-get prop 'name)))
               (setq ser
                        (CONS (vl-string-trim " " (vlax-get prop 'value))
                              SER
                        ) ;_ CONS
               ) ;_ setq
             ) ;_ if
             ) ;_ vlax-for
           ) ;_ vlax-for
        ) ;_ if
      ) ;_ lambda
    ) ;_ function
) ;_ vl-catch-all-apply
(if drv
    (vlax-release-object drv)
) ;_ if
(if srv
    (vlax-release-object srv)
) ;_ if
(if wmi
    (vlax-release-object wmi)
) ;_ if
(REVERSE ser)
) ;_ defun


baitang36 发表于 2022-5-2 13:38:09

(defun MainBoardSerial (/ item meth1 meth2 s serx wmi)
(vl-load-com)
(setq WMI (vlax-create-object "WbemScripting.SWbemLocator")
      meth1 (VLAX-INVOKE WMI 'ConnectServer nil nil nil nil nil nil nil nil)
      meth2 (vlax-invoke meth1 'ExecQuery "select SerialNumber from Win32_BaseBoard")
      s (vlax-for item meth2 (setq serx (list (vlax-get item 'SerialNumber))))
)
(vlax-release-object meth1)
(vlax-release-object meth2)
(vlax-release-object wmi)
(car s)
)


(vl-load-com)
(defun GetMacAddress
       (/ LocatorObj ServiceObj SecurityObj ObjectSetObj OutList)
(setq LocatorObj (vlax-create-object "WbemScripting.SWbemLocator"))
(setq
    ServiceObj (vlax-invoke LocatorObj 'ConnectServer nil nil nil nil nil nil nil nil)
)
(setq        ObjectSetObj
        (vlax-invoke ServiceObj 'ExecQuery "Select * from Win32_NetworkAdapter")
)
(vlax-for Obj        ObjectSetObj
    (if        (wcmatch (vl-princ-to-string (vlax-get Obj 'AdapterType)) "Ethernet 802.*")
      (setq OutList (cons (vlax-get Obj 'MACAddress) OutList))
    )
)
(foreach Obj (list LocatorObj ServiceObj SecurityObj ObjectSetObj)
    (and Obj (vlax-release-object Obj))
)
OutList
)

whonggg 发表于 2011-8-5 15:09:14

返回值是nil,

qqqmmkx7898 发表于 2011-8-12 08:36:47

加密要加到硬件的地步了....................

f4800 发表于 2022-5-4 18:21:05

好帖子可以绑定硬盘不再怕格式化硬盘会变机器码了

chuanyumin 发表于 2022-6-19 12:26:06

很好的帖子

烟盒迷唇 发表于 2022-7-4 14:48:49

baitang36 发表于 2022-5-2 12:04
win10下试验是成功的。如果有多块硬盘,楼主的代码只能返回最后一块硬盘的物理序列号。我把它改了一下,让 ...

包含移动硬盘和U盘吗

baitang36 发表于 2022-7-5 07:51:55

烟盒迷唇 发表于 2022-7-4 14:48
包含移动硬盘和U盘吗

你试验一下啊
页: [1] 2
查看完整版本: 关于物理硬盘序列号