理论上讲，硬盘出厂序列号在全球都是唯一的，jyDisk.DLL 是一个标准的Windows动态链接库，它能够让您在你的程序中简单地获取硬盘出厂序列号。
jyDisk.DLL可以应用于各种流行的开发语言，比如Delphi, C++Builder, C#, Visual C++, Visual Basic, Visual Basic.NET, PowerBuilder等，示例为delphi7调用代码.另提供activex版本ocx供java asp等系统调用。
jyDisk.DLL特性
1.支持windows2000,xp及以上系统，支持64位操作系统，支持U盘/移动硬盘，不支持win98及以下操作系统。
2.仅需1个dll文件(activex版本为ocx)。
3.在win7/win8/win10等系统下，无需管理员权限（移动硬盘要获取真正的硬盘号，需要管理员权限）。
4.支持根据盘符获取硬盘的物理序号，支持获取磁盘类型。
5.支持smart信息获取。

注册费:dll版本180元人民币,支持动态调用和静态调用;lib静态库版本1000元。未注册版本，输出序列号少最后2位。注册序列号不绑定机器，方便您软件的发布!
2019-06-12
一生中最爱 qq:171833017 www.dxmylove.com

友情提示:缴费后联系我获取注册用户和注册id及注册版本dll,本dll内有防破解机制，使用破解版本可能会导致系统不稳定。
-----------------------------------------------------
2019-06-12 vb调用示例更新,解决ide环境下注册不成功bug
2019-05-26 vc动态调用更新到最新
2019-03-24 所有函数首字母改为小写
2019-03-07 增加磁盘名字及磁盘容量获取函数
2018-12-27 activex注册机制优化
2018-08-09 获取磁盘序列号函数增加PNPDeviceID:bool=false参数，PNPDeviceID=true时，获取不到序列号，会返回磁盘的PNPDeviceID
2018-04-09 增加activex版本支持,注册机制优化
2017-12-28 发现有些系统运行vs编译的dll,会报缺少msvcp100.dll等运行库，增加提供不需要运行库的dll
2017-12-12 增加U盘/移动硬盘pnpdeviceid获取
2017-09-26 增加命令行exe,供java等其他语言调用
2017-09-22 增加初始化函数init,在注册之前调用
2017-09-21 dll代码在vs2010下，用vc++全部重写完毕，有效减小dll/lib包的大小!同时修正delphi版本中一些小bug
2017-09-13 注册机制调整，增加软件标识校验
2017-09-11 发现vc汇编获取cpuid时，ebx转换后8位字符串，从左边数第2位会变(相同代码，delphi的不会);为统一，delphi版本和vc版本都把这第2位置为0
2017-09-06 增加fortran示例代码(在ivf2013/vs2010下，32/64调试通过)，增加vc动态链接库lib静态调用demo
2017-09-05 修改64位下，注册失败的bug，优化代码，减小dll大小
2017-09-04 增加IsWin64函数，用于检测dll版本是否是64的
2017-09-02 代码在c++builder6下编译通过，增加c++builder6 dll动态调用和静态调用示例代码，增加lib静态库示例代码
2017-08-24 增加ip,mac地址信息获取
2017-08-20 dll在64位环境下编译通过，增加md5计算接口，增加cpu/主板/显卡等其他硬件信息获取；bios信息在本地获取和通过远程登陆系统获取，得到的内容不一样，所以把首次获取的值写入注册表，保持bios一致；cpu获取dwProcessorType参数，在32位64位下不一致，舍弃
2017-04-25 增加c#语言goReg函数声明及使用示例代码
2016-12-30 增加vb.net测试用例,在vs2010下编译测试通过
2016-12-14 修改smart结构中的string[255]为array[0..255]
2016-11-23 增加防破解机制
2016-11-21 增加vc测试用例,在vc6下编译测试通过
2016-11-20 增加vb测试用例,在vb6下编译测试通过,修正代码在vb6下报错的bug
2016-09-20 获取物理磁盘个数修改了设备号不连续引起的bug
2016-09-04 增加smart信息获取
2016-08-22 增加c#测试用例,在vs2010/win10下编译测试通过
2016-08-18 修正了usb接入移动硬盘序列号获取的bug
2016-06-02 优化了序列号的获取速度

-----------------------------------------------------------------

32位dll/lib,64位dll/lib，都是用vs2010的vc++，基于原delphi代码重写的；cb静态调用的lib基于delphi代码编译生成。 
.JyDiskInfoDll.pas是delphi调用dll的接口，其他语言调用可以参考
delphi中声明如下
getDiskSerialNumber_1: procedure(drive: ansiChar; pout: PAnsiChar; var poutsize: integer;PNPDeviceID:bool=false); stdcall;//函数的声明
getDiskSerialNumber_2: procedure(index: integer; pout: PAnsiChar; var poutsize: integer;PNPDeviceID:bool=false); stdcall;//函数的声明
getDiskSerialNumber_1 := GetProcAddress(hDll, 'getDiskSerialNumber1');//函数在dll里的名字
getDiskSerialNumber_2 := GetProcAddress(hDll, 'getDiskSerialNumber2');//函数在dll里的名字
.示例代码中jydisk.h(vc调用示例\dll静态调用\VCDllDemoLib\VCDllDemoLib)是c语言的声明接口

由于对其他开发语言不是很熟悉，示例代码写的很粗糙，有问题请直接和我联系。

在vb环境中运行，会提示找不到dll,在外面运行正常！


注册用户注意事项：
1.缴费后，联系我获取用户id和注册id及最新版dll，网上自行下载的dll就不要再用了，可能和发你的注册id不匹配!
  缴费后发您的jysoft.jyr文件是发您自己存档用的,不要随您的应用发布!
  要使用缴费后发您的dll/lib，以前的就不要再用了!
2.在获取磁盘序列号前，执行下下面这函数
  init_:procedure();stdcall;
  然后才可以
  doReg_: procedure(fuser: PansiChar; usersize: integer; fregid: PansiChar; regidsize: integer); stdcall;//函数的声明
  doReg_ := GetProcAddress(hDll, 'doReg');//函数在dll里的名字
  ，然后就可以获取到完整的磁盘序列号了
  无需多次调用DoReg函数，在动态库加载后，调用一次DoReg即可。

  c#语言DoReg函数的声明与使用
  [DllImport("jydisk.dll")]
        static extern void doReg(StringBuilder fuser, int usersize, StringBuilder fregid, int regidsize);
        private void button4_Click(object sender, EventArgs e)
        {
            StringBuilder userid = new StringBuilder(textBox2.Text);
            StringBuilder regid = new StringBuilder(textBox3.Text);
            int usersize = textBox2.TextLength;
            int regidsize = textBox3.TextLength;
            doReg(userid, usersize, regid, regidsize);
        }   
  函数使用流程如下: 
  init;
  doReg('xxxxxxxxxx',n,'yyy',m);
  getDiskSerialNumber_1('c',buf,bufsize,false);
3.其他语言dll的声明参考示例程序，结合JyDiskInfoDll.pas/vc调用示例\dll静态调用\VCDllDemoLib\VCDllDemoLib\jydisk.h，应该就可以了
4.32位程序，可以在32位系统/64位系统中运行；64位程序，只能在64位系统中运行。
  32位dll/lib，只能在32位应用程序中使用
  64位dll/lib，只能在在64位程序中使用
5.提供dll方式（静态调用，动态调用）/lib静态库调用/exe命令行等接口，有其他需求可直接联系我
  使用静态库，程序发布的时候，功能都打包exe里，无需再发布dll/lib,不过exe比较大
  使用dll,无论是静态调用，还是动态调用，发布时都需要发布dll,exe比较小
6.不是所有磁盘都能获取到硬盘序列号
7.可以提供3个版本的dll
7.1delphi编译的dll
   运行时不依赖其他动态库，但编译出来的文件较大
7.2vs2010编译的需要运行库的dll
   比delphi编译出来的dll要小，但在有些系统下运行，会报缺少msvcp100.dll等运行库
   bin\dll32下是vs编译的32位dll所需要的运行库,bin\dll64下是vs编译的64位dll所需要的运行库 
7.3vs2010编译的不依赖运行库的dll
   文件比较大，可能比delphi编译出来的还大
推荐使用delphi版的dll,bin目录下的测试用例中提供的就是delphi版本的dll,如需其他版本的可直接联系我。
8.其他问题可以直接和我联系




