关于物理硬盘序列号
<p>为什么在WIN2000下不能使用方法 VLAX-METHOD 'CONNECTSERVER</p><p>请高手赐教</p><p>(defun phyhar (/ ret serx objw lccon lox)<br/> (vl-load-com)<br/> (setq serx '())<br/> (if (SETQ OBJW (VLAX-CREATE-OBJECT "wbemScripting.SwbemLocator"))<br/> (progn<br/> (SETQ lccon (VLAX-INVOKE<br/> OBJW 'ConnectServer "."<br/> "\\root\\cimv2" "" ""<br/> "" "" 128 nil<br/> )<br/> )<br/> (setq lox (vlax-invoke<br/> lccon<br/> 'ExecQuery<br/> "Select SerialNumber,Tag from Win32_PhysicalMedia"<br/>)<br/> )<br/> (vlax-for item lox<br/>(setq serx (cons (list (vlax-get item 'Tag)<br/> (vlax-get<br/>item<br/>'SerialNumber<br/> )<br/>)<br/>serx<br/> )<br/>)<br/> )<br/> (vlax-release-object lox)<br/> (vlax-release-object lccon)<br/> (vlax-release-object objW)<br/> )<br/> )<br/> (princ (reverse serx))<br/> (princ)<br/>)</p><p></p><p></p><p></p> (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: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
(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
)
返回值是nil, 加密要加到硬件的地步了.................... 好帖子可以绑定硬盘不再怕格式化硬盘会变机器码了 很好的帖子 baitang36 发表于 2022-5-2 12:04
win10下试验是成功的。如果有多块硬盘,楼主的代码只能返回最后一块硬盘的物理序列号。我把它改了一下,让 ...
包含移动硬盘和U盘吗 烟盒迷唇 发表于 2022-7-4 14:48
包含移动硬盘和U盘吗
你试验一下啊
页:
[1]
2