我有一个问题,如何在Delphi中生成唯一的机器序列号?我尝试使用主板或处理器的ID来实现这一点,但不幸的是它不被支持。分区序列号等会掉落,因为它们在格式化后会发生变化。我正在寻找一些在格式化后不会改变的东西。有人有什么想法吗?
我有一个问题,如何在Delphi中生成唯一的机器序列号?我尝试使用主板或处理器的ID来实现这一点,但不幸的是它不被支持。分区序列号等会掉落,因为它们在格式化后会发生变化。我正在寻找一些在格式化后不会改变的东西。有人有什么想法吗?
在 JCL 库中,有几个与此主题非常有用的函数:
function CPUID: TCpuInfo;
function GetMacAddresses(const Machine: string; const Addresses: TStrings): Integer;
function GetVolumeSerialNumber(const Drive: string): string;
function GetBIOSName: string;
alt text http://img175.imageshack.us/img175/1250/imagen344.png
包括BIOSInfo、DiskInfo、ProcessorInfo等组件。
使用这三个组件,您可以获得如下信息:
alt text http://img690.imageshack.us/img690/6006/imagen349.png
你可以在这里找到GenericDemo(所有组件)的BIN/EXE;使用这些组件,你可以测试所有可检索到的信息。我在好早的DOS时代也遇到了类似的问题。我发现安装的硬件,例如视频卡、磁盘控制器、串行端口等ROM可以直接访问,因为它们是映射到内存中的。这意味着我能够创建一个已安装硬件列表,并用它生成一个“序列号”,唯一地标识每台电脑(直到硬件设置被更改)。我相信今天也有类似的可能性。
如果您想采用这种方法,请查看http://duartes.org/gustavo/blog/post/motherboard-chipsets-memory-map。
敬礼
通常使用网络适配器的MAC地址,有多种方式来查询MAC地址(在Delphi中),但最简单/最清晰的方法可能是使用GetAdaptersInfo API。
这里有一个简单的解决方案
如果您担心安全问题,请对(GUID + 一些秘密数据)进行哈希处理
我倾向于同意“无法完成”的观点。至少不是100%,但可能可以做到“足够好”,以使普通用户保持一致。
如果可以完成,那么它可能已经完成了。您是否检查过Torry的Delpi300等(甚至可能是sourceforge,尽管您可能需要将其翻译成Delphi)。