您的位置 首页 > u盘教程

delphi读硬盘序列号控件_delphi获取硬盘序列号

delphi读硬盘序列号控件_delphi获取硬盘序列号

       谢谢大家给我提供关于delphi读硬盘序列号控件的问题集合。我将从不同的角度回答每个问题,并提供一些相关资源和参考资料,以便大家进一步学习和了解。

1.delphi 高分请教:怎样在win2000/Nt下取得主板序列号?

2.如何监控一个程序(Delphi写的)读了哪个(些)硬件信息而生成这台机器的硬件识别码?

3.vb中用什么东西可以看到电脑硬盘的序列号啊?

4.delphi xe 取CPU等硬件信息

5.求DELPHI 中得出硬盘号的代码?

delphi读硬盘序列号控件_delphi获取硬盘序列号

delphi 高分请教:怎样在win2000/Nt下取得主板序列号?

       to:delphi0302

       很抱歉,你的程序取的不是mainboard

       serial(序列号);我也试过从注册表中取。但没有取到。比开机自检的时候少了一些东西,那些少了的就是序列号。

       谢谢你提供的代码!

如何监控一个程序(Delphi写的)读了哪个(些)硬件信息而生成这台机器的硬件识别码?

       这个问题让我来回答你吧,因为我用delphi7做这个有八九年历史了,一直用硬件序列号进行加密注册,所以还是有发言权的。又因为不要你的分数,所以就懒得登陆了。不过,答案你也会有点点失望,因为我没能解决你的问题。

       先说说主板吧,如果你是想做软件加密,这个你就死了心吧,因为主板的Bios没有统一格式,而且Bios版本不同,所用的存储格式也不尽相同,所以,你即使今天把获取市面上的所有主板序列号的函数都写好了,明天出新的主板,你的函数照样识别不了,获取主板序列号就失败了。

       那么什么最稳定呢?答案是硬盘序列号。其他那些什么网卡MAC、CPU序列号等等等等,都是不行的。只有硬盘序列号最稳定,几乎百分百成功,而且在VISTA和Win7下面不需要管理员权限都可以获取到。但是,硬盘种类也不少,比如有IDE的,有SATA一代、二代的,有SCSI的,要针对每种硬盘写对应的函数,这个工作量也不小。正因为这样,这种函数大多被做成了dll,商业出售。换句话说,你想用得专业,就请购买。因为人家专门研究这个,肯定也是要吃饭的。天下没有免费午餐的,即使有,也是不容易消化的。

vb中用什么东西可以看到电脑硬盘的序列号啊?

       你想做破解啊?

       没办法监控的,就算你监控到了又能怎么样?

       比如你监控到是读取网卡MAC和硬盘物理序列号

       硬件识别码是根据这两样生成的,算法由写的人来定,所以你不可能知道的

       DELPHI的程序,如果没有加壳,可以用DEDE反编译的

       大部分破解都是将判断语句剔除或修改

       比如

       if sn=getid then

       采集的注册码正确,继续运行

       else

       begin

       showmessage('未注册。。。。。。。');

       退出程序

       end;

       将这段剔除,或将=修改为<>都可以OK的,破解方法多种多样,防破解的也多种多样

       想学破解,可以去看雪论坛看看,那里这方面高手N多

delphi xe 取CPU等硬件信息

       原作: Bardo

       '出处: 《东方热讯》网站

       '网址: www.easthot.net

       '****************************************************************

       '(如需转载,请不在删除以上信息,否则视为侵权!)

       '****************************************************************

        要这个有什么用?可以生成与硬件相关的注册码。控制软件不重复使用!那么,很多多人认为VB实现不了。自然没有找到方法,一定是实现不了。然而,感谢WWW,我们能在上面找到VC的源码,DELPHI的源码。但是VB的就是见不到。为此,我决定将VC的源码改成VB的,以下即是:

       'VC原作说明部分(再发行时,请注意采用注解的方式,请不要删除的方式侵权,谢谢!)

       '*************************************************************************

       '通常情况下,我们通过=&HEC命令对IDE端口进行监测.获取硬盘信息.

       '一般情况下,我们就写个VXD或者DRIVER来完成.但是现在,通过MS的S.M.A.R.T.接口,

       '我们可以直接从RING3调用API DeviceIoControl()来获取硬盘信息.下面乃是我的例程:

       '另外,也有编译好的版本供大家平时使用.欢迎下载.

       '/*+++

       'HDID.CPP

       'Written by Lu Lin

       '

       '2000.11.3

       '---*/

       '*************************************************************************

       'VB程序编制: BARDO

       '本来我想写一个只取盘动物理序列号的。但是考虑到大家学习的方便。还是将原来的代码

       '全部翻译了出来。如果你需要单一的只查一个主硬盘的序列号的程序,欢迎到本站下载。

       '

       '网站:东方热讯:mands".

        bSectorCountReg As Byte 'IDE sector count register

        bSectorNumberReg As Byte 'IDE sector number register

        bCylLowReg As Byte 'IDE low order cylinder value

        bCylHighReg As Byte 'IDE high order cylinder value

        bDriveHeadReg As Byte 'IDE drive/head register

        bCommandReg As Byte 'Actual IDE command.

        bReserved As Byte 'reserved for future use. Must be zero.

       End Type

       Private Type TSENDCMDINPARAMS

        cBufferSize As Long 'Buffer size in bytes

        irDriveRegs As TIDEREGS 'Structure with drive register values.

        bDriveNumber As Byte 'Physical drive number to send 'command to (0,1,2,3).

        bReserved(2) As Byte 'Reserved for future expansion.

        dwReserved(3) As Long 'For future use.

        ''BYTE bBuffer(1) 'Input buffer.

       End Type

       Private Type TDRIVERSTATUS

        bDriverError As Byte 'Error code from driver, 'or 0 if no error.

        bIDEStatus As Byte 'Contents of IDE Error register.

        'Only valid when bDriverError 'is SMART_IDE_ERROR.

        bReserved(1) As Byte 'Reserved for future expansion.

        dwReserved(1) As Long 'Reserved for future expansion.

       End Type

       Private Type TSENDCMDOUTPARAMS

        cBufferSize As Long 'Size of bBuffer in bytes

        DRIVERSTATUS As TDRIVERSTATUS 'Driver status structure.

        bBuffer(511) As Byte 'Buffer of arbitrary length

        'in which to store the data read from the drive.

       End Type

       '下面的结构是要从另一结构复制数据过来的,所以,必须是字节数与VC的完全一致

       '而不能用兼容变量,但这里的我们还是用了兼容变量,Integer,因为此结构中这一

       '类型的的变量程序中没有用到,如果要用到,建议改为Byte类型。因为VB没有USHORT

       Private Type TIDSECTOR

        wGenConfig As Integer

        wNumCyls As Integer

        wReserved As Integer

        wNumHeads As Integer

        wBytesPerTrack As Integer

        wBytesPerSector As Integer

        wSectorsPerTrack As Integer

        wVendorUnique(2) As Integer

        sSerialNumber(19) As Byte

        wBufferType As Integer

        wBufferSize As Integer

        wECCSize As Integer

        sFirmwareRev(7) As Byte

        sModelNumber(39) As Byte

        wMoreVendorUnique As Integer

        wDoubleWordIO As Integer

        wCapabilities As Integer

        wReserved1 As Integer

        wPIOTiming As Integer

        wDMATiming As Integer

        wBS As Integer

        wNumCurrentCyls As Integer

        wNumCurrentHeads As Integer

        wNumCurrentSectorsPerTrack As Integer

        ulCurrentSectorCapacity(3) As Byte '这里只能用byte,因为VB没有无符号的LONG型变量

        wMultSectorStuff As Integer

        ulTotalAddressableSectors(3) As Byte '这里只能用byte,因为VB没有无符号的LONG型变量

        wSingleWordDMA As Integer

        wMultiWordDMA As Integer

        bReserved(127) As Byte

       End Type

       '/*+++

       'Global vars

       '---*/

       Private vers As TGETVERSIONOUTPARAMS

       Private in_data As TSENDCMDINPARAMS

       Private out_data As TSENDCMDOUTPARAMS

       Private h As Long

       Private i As Long

       Private j As Byte

       Private Type OSVERSIONINFO

        dwOSVersionInfoSize As Long

        dwMajorVersion As Long

        dwMinorVersion As Long

        dwBuildNumber As Long

        dwPlatformId As Long

        szCSDVersion As String * 128

       End Type

       Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" _

        (LpVersionInformation As OSVERSIONINFO) As Long

       Private Const VER_PLATFORM_WIN32S = 0

       Private Const VER_PLATFORM_WIN32_WINDOWS = 1

       Private Const VER_PLATFORM_WIN32_NT = 2

       Private Declare Function CreateFile Lib "kernel32" _

        Alias "CreateFileA" (ByVal lpFileName As String, _

        ByVal dwDesiredAccess As Long, ByVal dwShareMode As Long, _

        ByVal lpSecurityAttributes As Long, _

        ByVal dwCreationDisposition As Long, _

        ByVal dwFlagsAndAttributes As Long, ByVal hTemplateFile As Long) _

        As Long

       Private Const CREATE_NEW = 1

       Private Const GENERIC_READ = &H80000000

       Private Const GENERIC_WRITE = &H40000000

       Private Const OPEN_EXISTING = 3

       Private Const FILE_SHARE_READ = &H1

       Private Const FILE_SHARE_WRITE = &H2

       Private Type OVERLAPPED

        Internal As Long

        InternalHigh As Long

        offset As Long

        OffsetHigh As Long

        hEvent As Long

       End Type

       Private Declare Function DeviceIoControl Lib "kernel32" _

        (ByVal hDevice As Long, ByVal dwIoControlCode As Long, _

        lpInBuffer As Any, ByVal nInBufferSize As Long, _

        lpOutBuffer As Any, ByVal nOutBufferSize As Long, _

        lpBytesReturned As Long, lpOverlapped As OVERLAPPED) As Long

       Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long

       Private Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" ( _

        hpvDest As Any, hpvSource As Any, ByVal cbCopy As Long)

       Private Sub CopyRight()

       'VC原版权代码(再发行时,请注意采用注解的方式,请不要删除的方式侵权,谢谢!)

       '****************************************************************************

       ' cerr<<endl<<"HDD identifier v1.0 for WIN95/98/Me/NT/2000. written by Lu Lin"<<endl

       ' cerr<<"For more information, please visit Inside Programming: "<<endl

       ' cerr<<"2000.11.3"<<endl<<endl

       '****************************************************************************

       Dim StrMsg As String

       StrMsg = StrMsg & "直接从RING3调用API DeviceIoControl()来获取硬盘信息的VB程序 "

       StrMsg = StrMsg & vbCrLf & "VC源作板权信息如下:"

       StrMsg = StrMsg & vbCrLf & "***********************************************************"

       StrMsg = StrMsg & vbCrLf & "HDD identifier v1.0 for WIN95/98/Me/NT/2000. written by Lu Lin"

       StrMsg = StrMsg & vbCrLf & "For more information, please visit Inside Programming: "

       StrMsg = StrMsg & vbCrLf & "2000.11.3"

       StrMsg = StrMsg & vbCrLf & "***********************************************************"

       StrMsg = StrMsg & vbCrLf & "VB程序编制:BARDO"

       StrMsg = StrMsg & vbCrLf & "网站:东方热讯:mand not supported, fails

       If (vers.fCapabilities And 1) <> 1 Then

        hdid9x = "Error: IDE identify command not supported."

        CloseHandle (h)

        Exit Function

       End If

       'Display IDE drive number detected

       Dim sPreOutStr As String

       sPreOutStr = DetectIDE(vers.bIDEDeviceMap)

       hdid9x = sPreOutStr

       'Identify the IDE drives

       For j = 0 To 3

        Dim phdinfo As TIDSECTOR

        Dim s(40) As Byte

        If (j And 1) = 1 Then

        in_data.irDriveRegs.bDriveHeadReg = &HB0

        Else

        in_data.irDriveRegs.bDriveHeadReg = &HA0

        End If

        If (vers.fCapabilities And (16 \ (2 ^ j))) = (16 \ (2 ^ j)) Then

        'We don't detect a ATAPI device.

        hdid9x = "Drive " & CStr(j + 1) & " is a ATAPI device, we don't detect it"

        Else

        in_data.irDriveRegs.bCommandReg = &HEC

        in_data.bDriveNumber = j

        in_data.irDriveRegs.bSectorCountReg = 1

        in_data.irDriveRegs.bSectorNumberReg = 1

        in_data.cBufferSize = 512

        lRet = DeviceIoControl(h, DFP_RECEIVE_DRIVE_DATA, in_data, Len(in_data), out_data, Len(out_data), ByVal i, olp)

        If lRet = 0 Then

        hdid9x = "DeviceIoControl failed:DFP_RECEIVE_DRIVE_DATA"

        CloseHandle (h)

        Exit Function

        End If

        Dim StrOut As String

        CopyMemory phdinfo, out_data.bBuffer(0), Len(phdinfo)

        CopyMemory s(0), phdinfo.sModelNumber(0), 40

        s(40) = 0

        ChangeByteOrder s, 40

        StrOut = ByteArrToString(s, 40)

        hdid9x = hdid9x & vbCrLf & "Module Number:" & StrOut

        CopyMemory s(0), phdinfo.sFirmwareRev(0), 8

        s(8) = 0

        ChangeByteOrder s, 8

        StrOut = ByteArrToString(s, 8)

        hdid9x = hdid9x & vbCrLf & "Firmware rev:" & StrOut

        CopyMemory s(0), phdinfo.sSerialNumber(0), 20

        s(20) = 0

        ChangeByteOrder s, 20

        StrOut = ByteArrToString(s, 20)

        hdid9x = hdid9x & vbCrLf & "Serial Number:" & StrOut

        CopyMemory s(0), phdinfo.ulTotalAddressableSectors(0), 4

        s(5) = 0

        Dim dblStrOut As Double

        dblStrOut = ByteArrToLong(s)

        hdid9x = hdid9x & vbCrLf & "Capacity:" & dblStrOut / 2 / 1024 & "M"

        End If

       Next j

       'Close handle before quit

       CloseHandle (h)

       CopyRight

       End Function

       Private Function hdidnt() As String

       Dim hd As String * 80

       Dim phdinfo As TIDSECTOR

       Dim s(40) As Byte

       Dim StrOut As String

       hdidnt = ""

       'We start in NT/Win2000

求DELPHI 中得出硬盘号的代码?

uses?HardWareInfo.pas?{引用自定义单元,文件见附件}

       procedure?TForm1.Button1Click(Sender:?TObject);

       var

CPUinfo:TCPU_info;//定义CPU对象

Diskinfo:TDisk_info;?//硬盘

Memoryinfo:TMemory_info;?//内存

NICinfo:TNIC_info;//网卡

VGAinfo:TVGA_info;//显卡

       begin

//创建实例

CPUinfo:=TCPU_info.Create;

Diskinfo:=TDisk_info.Create;

Memoryinfo:=TMemory_info.Create;

NICinfo:=TNIC_info.Create;

VGAinfo:=TVGA_info.Create;

//显示硬件信息

memo1.Lines.Add('********************CPU*************************');

memo1.Lines.Add('制造商:?'+CPUinfo.GetCpuFactory);

memo1.Lines.Add('型号:'+CPUinfo.GetCpuModel);

memo1.Lines.Add('个数:'+CPUinfo.GetCPUCount);

memo1.Lines.Add('********************硬盘*************************');

memo1.Lines.Add(Diskinfo.print_diskinfo);

memo1.Lines.Add('********************内存*************************');

memo1.Lines.Add(Memoryinfo.GetMemorysize);

memo1.Lines.Add(Memoryinfo.Getvirtualmemory);

memo1.Lines.Add(Memoryinfo.GetusingMemory);

memo1.Lines.Add('********************网卡*************************');

memo1.Lines.Add('序列号:?'+NICinfo.GetNICID);

memo1.Lines.Add('本地IP:?'+NICinfo.GetLocalIP);

memo1.Lines.Add('MAC地址:?'+NICinfo.GetMAC);

memo1.Lines.Add('********************显卡*************************');

memo1.Lines.Add(VGAinfo.printf_VGAinfo);

       end;

       硬盘号可以用这个方法来获得

       至于要怎么生成注册号,就看你的注册算法了

       procedure TForm1.FormCreate(Sender: TObject);

       var

       dw,dwTemp1,dwTemp2:DWord;

       p1,p2:array[0..30] of char;

       begin

       GetVolumeInformation(PChar('c:\'),p1,20,@dw,dwTemp1,dwTemp2,p2,20);

       edit1.text:=inttohex(dw,8);//系列号

       end;

       今天关于“delphi读硬盘序列号控件”的讨论就到这里了。希望通过今天的讲解,您能对这个主题有更深入的理解。如果您有任何问题或需要进一步的信息,请随时告诉我。我将竭诚为您服务。

热门文章