| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 506 人关注过本帖
标题:请问这段是对C盘序列号如何运算
只看楼主 加入收藏
lriong
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-2-3
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:4 
请问这段是对C盘序列号如何运算
小弟才刚开始接触VB,有多地方不懂!恳请指导一下有这以下这段,只知道是读C盘序列号,然后运算,有大家指点下是如何运算,谢谢!

Private Sub Form_Initialize()
 Dim l As Integer, i As Integer, HddIDMid() As String, HddID As String
HddID = GetSerialNumber("C:\")
'Debug.Print HddID

'Debug.Print Val(Mid(HddID, 1, 1))

0 l = Len(Trim(HddID))
ReDim HddIDMid(l)
For i = 1 To l Step 1
    HddIDMid(i) = ChrW(Val(Mid(HddID, i, 1)) + 97)   '单字符解密
'    Debug.Print HddIDMid(i)
   
Next
HddID = ""
For i = l To 1 Step -1
    HddID = Trim(HddIDMid(i)) + Trim(HddID)          '组合后得到密码
Next
'Debug.Print HddID
'Debug.Print IWSH.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\001")
If HddID <> IWSH.RegRead("HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\001") Then ' 只能读ASCII字符,而GetSeting函数可以读非ASCII字符(ASCII码超出255)
    MsgBox "1、此处省略。" & Chr(13) & _
           "2、此处省略。" & Chr(13) & _
           "3、此处省略。" & Chr(13) & Chr(13) & _
搜索更多相关主题的帖子: 序列号 如何 
2015-03-02 00:41
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:20 
回复 楼主 lriong
粗略解释一下:
VB没有getserialnumber函数,通常是自定义函数。此处应该是调用了API的GetVolumeInformation函数,将逻辑C盘的序列号赋值到hddid中(序列号是一串数字)。
单字符解密是将hddid中的每一个字符数字加偏移数97后用chrw函数转码得到。
最后再用Wscript.Shell对象读取注册表中的数据与之比较。
一般认为磁盘在逻辑盘格式化后或重新分区后,逻辑序列号会改变。
网上搜搜有现成的读取物理硬盘序列号的代码。

[ 本帖最后由 lianyicq 于 2015-3-2 10:19 编辑 ]

大开眼界
2015-03-02 09:39
lriong
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-2-3
收藏
得分:0 
回复 2楼 lianyicq
请问版主,我在运行这个工程文件时,提示这个自定义函数没有定义,我如何才能让它能正常运行呢?
2015-03-02 14:03
lianyicq
Rank: 12Rank: 12Rank: 12
等 级:贵宾
威 望:26
帖 子:737
专家分:3488
注 册:2013-1-26
收藏
得分:0 
可以直接调用API函数GetVolumeInformation
Public Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long
比如获取C盘序列号:
程序代码:
Private Declare Function GetVolumeInformation Lib "kernel32" Alias "GetVolumeInformationA" (ByVal lpRootPathName As String, ByVal lpVolumeNameBuffer As String, ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, lpMaximumComponentLength As Long, lpFileSystemFlags As Long, ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long) As Long

Private Sub Form_Load()
     Dim DriverName As String
     Dim SerialNum As Long
     Dim Buffer1 As String
     Dim Buffer2 As String
     DriverName = "c:\"
     Buffer1 = String$(255, 0)
     Buffer2 = String$(255, 0)
     GetVolumeInformation DriverName, Buffer1, Len(Buffer1), SerialNum, 0, 0, Buffer2, Len(Buffer2)
     Form1.Caption = SerialNum
End Sub

 

大开眼界
2015-03-02 16:59
lriong
Rank: 1
等 级:新手上路
帖 子:3
专家分:0
注 册:2015-2-3
收藏
得分:0 
十分感谢版主的解答!大致明白了。
2015-03-07 21:01
快速回复:请问这段是对C盘序列号如何运算
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.027804 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved