尘缘一生 发表于 2022-4-24 03:10:45

硬件相关函数

本帖最后由 尘缘一生 于 2022-4-24 20:25 编辑

根据本坛及搜集的代码:
我的理解是:
1:网卡的MAC是独立唯一的。
3:CPU不能保证唯一
4:硬盘序号:不能保证唯一,格式化后会变化;而物理硬盘序号, LISP取不了,硬盘类型函数也不是唯一的,可以取字符串用。
5:主板类型:不唯一,可以取字符串用。
      
没有测试,是不是WIN7,WIN10这些都成功否,CAD所有版本都成功否?有用过的,贴上结论。。

;|IP是在计算机里地址与MAC地址以MAC地址2表示的,IP是48位的。
MAC的长度为48位(6个字节),为12个16个典型地址数
代表前6位16的EA数字00-16-制造硬件网络的,它由电气与电子协会分配,
而代表后6位16的爆系列商号AE-3C-40的网络产品制造(如网卡)
只是不改变自己的MAC地址,MAC地址在世界是惟一的
用法:(setq str (wdy_mac)) "4C:CC:6A:2B:6E:6E"
|;
( defun wdy_mac ( / macip )
( setq WMI ( vlax-create-object "WbemScripting.SWbemLocator" ))
( setq SVR ( vlax-invoke WMI 'ConnectServer ))
( setq   str "Select * from Win32_NetworkAdapterConfiguration Where IPEnabled=TRUE" )
( setq MAC ( vlax-invoke SVR 'ExecQuery str ))
( vlax-for i MAC ( setq s ( cons ( vlax-get i 'MACAddress ) S )))
( setq macip ( car s ))
( vlax-release-object MAC )
( vlax-release-object SVR )
( vlax-release-object WMI )
;;马西普
)

;;获取CPU序列号 (get_cpu_number) "BFEBFBFF000906E9" CPUID很多电脑都一样
( defun get_cpu_number ( / wmi meth1 meth2 cpu_id board_id )
( setq wmi ( vlax-create-object "WbemScripting.SWbemLocator" ))
( setq   meth1 ( vlax-invoke-method wmi 'ConnectServer nil nil nil nil nil nil nil ) )
( setq   meth2 ( vlax-invoke-method meth1 'ExecQuery "Select * from Win32_Processor" nil nil nil ))
( vlax-for n meth2
    ;;(print (vlax-get n 'name)) ;"Intel(R) Core(TM) i5-7400 CPU @ 3.00GHz"
    ( setq cpu_id ( vlax-get n 'ProcessorId ))
)
( foreach obj ( list wmi meth1 meth2 ) ( if   obj ( vlax-release-object obj )))
cpu_id
)

;;获取主板序列号(get_motherboard_number) "G416195192"
( defun get_motherboard_number ( / wmi meth1 meth2 board_id )
( setq wmi ( vlax-create-object "WbemScripting.SWbemLocator" ))
( setq   meth1 ( vlax-invoke-method wmi 'ConnectServer nil nil nil nil nil nil nil ) )
( setq   meth2 ( vlax-invoke-method meth1 'ExecQuery "Select * from Win32_BaseBoard" nil nil nil ))
( vlax-for n meth2
    ;; (princ(vlax-get n'name));“产品”
    ( setq board_id ( vlax-get n 'SerialNumber ))
)
( foreach obj ( list wmi meth1 meth2 ) ( if   obj ( vlax-release-object obj )))
board_id
)

;---- 获取硬盘序列号------(find_serialnumber "C:")
( defun find_serialnumber (drive / filsys val )
( setq filsys ( vlax-create-object "Scripting.FileSystemObject" ))
(setq val (vlax-invoke filsys “GetDrive”drive))
( setq val ( vl-catch-all-apply ' vlax-get ( list val "SerialNumber" )))
( vlax-release-object filsys )
(if(vl-catch-all-error-p val )
    ( setq val nil )
    val
)
)
;|返回磁盘的类型
用法: (vldos-drivetype DriveLetter)
参数1: 盘符 例如: "C:"
说明:
    返回磁盘的类型
返回值:
[成功]: 磁盘的类型
[失败]: NIL
|;
(Defun vldos-drivetype (drv / Fil drives drive typ rtn)
(setq rtn "INVALID")
(if
    (and (setq
    Fil (vlax-get-or-create-object "Scripting.FileSystemObject")
)
(equal :vlax-true (vlax-invoke-method Fil 'DriveExists drv))
    )
   (progn
       (setq drives (vlax-get-property Fil 'Drives)
      drive(vlax-get-property drives 'Item drv)
      typ    (vlax-get-property drive 'DriveType)
      rtn    (nth typ
    (list "UNKNOWN"   "REMOVABLE"
          "FIXED"      "REMOTE"
          "CDROM"      "RAMDISK"
         )
      )
       )
       (vlax-release-object drive)
       (vlax-release-object drives)
       (vlax-release-object Fil)
   )
)
rtn
)

baitang36 发表于 2022-5-2 12:08:18

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


主板和内存序列号有些电脑是空的。
新cpu已经没有唯一的id,同一批产品是一样的。
网卡的mac可以通过修改注册表来改变它,虚拟机也有虚拟的mac,不可靠。
简单加密用硬盘的软件序列号就行,值钱的软件建议用专业加密锁,我研究过用lisp读写专业锁。
获取硬盘物理序列号的程序:
(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

返回一个表,所有硬盘的物理序列号。在win10下试验成功。别的系统没试验过。

尘缘一生 发表于 2022-5-2 15:31:37

baitang36 发表于 2022-5-2 12:08
主板和内存序列号有些电脑是空的。
新cpu已经没有唯一的id,同一批产品是一样的。
网卡的mac可以通过修 ...
老哥,硬盘格式化没有变化吧?网卡MAC是,可谁会没事改这个呢?

尘缘一生 发表于 2022-4-24 10:51:42

本帖最后由 尘缘一生 于 2022-4-24 12:51 编辑

e2002 发表于 2022-4-24 10:00
改成网络授权才能解决破解问题
网络授权,搞不到技术代码,希望本坛有整理一并发布。并且,没有网的地方就不行了,尤其是搞工程的,经常荒天野地。

ynhh 发表于 2022-4-24 09:32:25

可能还是用加密锁才好吧

e2002 发表于 2022-4-24 10:00:05

改成网络授权才能解决破解问题

尘缘一生 发表于 2022-4-24 10:53:03

ynhh 发表于 2022-4-24 09:32
可能还是用加密锁才好吧

软件正儿八经的开发商,大型的才值得。

1993063 发表于 2022-4-24 13:51:34

感谢各位大神分享,学习了!

f4800 发表于 2022-4-24 22:27:27

不错的源码 非常实用多谢

f4800 发表于 2022-4-24 22:32:49

本帖最后由 f4800 于 2022-4-27 14:13 编辑

不错的源码 非常实用多谢

zj20190405 发表于 2022-4-28 17:58:42

; 错误: 实参太少
页: [1] 2
查看完整版本: 硬件相关函数