vb中如何调用硬盘码,硬盘码与程序的值一样才能运行程序。

我这个软件使用人数少,但是会被外传。复杂的我不会弄。现在想弄简单点。先获取别人电脑的硬盘码---然后我专门修改程序,如果硬盘码=“程序给定值“,那么就执行后面程序,提供计... 我这个软件使用人数少,但是会被外传。复杂的我不会弄。现在想弄简单点。
先获取别人电脑的硬盘码---然后我专门修改程序,如果硬盘码=“程序给定值“,那么就执行后面程序,提供计算。
(这个好像输入密码才使用一样道理,但是这个的密码是需要一个
获取他本身电脑硬盘代码的过程,每次使用软件都执行一个验证 硬盘码是
不是和程序给定的码一样)。
或者有其他方式的,可以给我联系。我把源程序发来,您帮我弄下。
分数先给50分,做的好可以追加到200分。
只是需要知道D盘的 硬盘码就行了。软件直接拷贝到D盘,点击程序的时候,执行一个严重硬盘码是否=给定值(这个给定值是还要怎么获取?)
如果=,就可以执行软件了
展开
 我来答
网海1书生
科技发烧友

2011-09-10 · 擅长软件设计、WEB应用开发、小程序
网海1书生
采纳数:12311 获赞数:26225

向TA提问 私信TA
展开全部
既然知道了如何提取硬盘序列号,那还不好办吗?
你先让你的用户查出自己的D盘的序列号,方法有多种,比较简单的方法是:
点任务栏“开始”-“运行”,输入“cmd vol d:” (注意引号不要输入),然后让用户把窗口里显示的那个16进制序列号告诉你(最好让用户截图发给你自己看),比如是“0C59-7641”。然后你把这个序列号放入自己的程序里:
Private Sub Form_Load()
If Right("0000000" & Hex(GetSerialNumber("d")),8)<>"0C597641" Then End
......
End Sub
由于用软件提取的硬盘序列号是一个长整形数,所以要先把它转换为16进制数,而且要把前导零补齐保证是8位数,再和用户提取的序列号进行比对,不符合则退出。
把程序编译为EXE交给用户使用,他就只能在自己电脑使用了,给别人是用不了的。
当然实际应用中,还是有多个方面需要改进的:
1、用户提取序列号的过程最好做在软件中来自动帮他完成,这样用户就不会知道你是通过硬盘序列号来加密的(如果遇到懂编程的用户,他会很容易就破解的);
2、用户硬盘序列号可以不放在程序中,而放在另一个文件中或注册表中(当然一定要经过加密),这样就不用为每一个用户单独生成EXE文件了,不过程序的保密性就差了些,你自己权衡;
3、序列号的加密是非常必要的(即使是直接放到程序中),可以考虑MD5加密。
追问
谢谢老大。看了半天,你说的合情合理。但是我编程的水平实在很菜。
所以我只能朝简单的弄。
我都不知道怎么转化为16进制,呜呜。
我研究下哦。
要不我把源程序给您,你帮我弄下。非常简单的程序。

我说的意思是:我用其他人的提取硬盘码软件,可以得到人家的硬盘码(我拿来弄在程序中)。
但是我的程序如何在编制一个提取码,来验证是否相等。
最美乡村行
2011-09-10 · TA获得超过1136个赞
知道大有可为答主
回答量:1191
采纳率:0%
帮助的人:1621万
展开全部
Private Const MAX_FILENAME_LEN = 256
Private Declare Function GetVolumeInformation& Lib "kernel32" Alias "GetVolumeInformationA" _
(ByVal lpRootPathName As String, ByVal pVolumeNameBuffer As String, _
ByVal nVolumeNameSize As Long, lpVolumeSerialNumber As Long, _
lpMaximumComponentLength As Long, lpFileSystemFlags As Long, _
ByVal lpFileSystemNameBuffer As String, ByVal nFileSystemNameSize As Long)

Function GetSerialNumber(sDrive As String) As Long
Dim ser As Long
Dim s As String * MAX_FILENAME_LEN
Dim s2 As String * MAX_FILENAME_LEN
Dim i As Long
Dim j As Long

Call GetVolumeInformation(sDrive + ":\" & Chr$(0), s, MAX_FILENAME_LEN, ser, i, j, s2, MAX_FILENAME_LEN)
GetSerialNumber = ser
End Function

Private Sub Form_Load()
Debug.Print GetSerialNumber("d")
End Sub
追问
兄弟怎么用啊,用在哪里啊?这段我见过。但是不知道怎么弄在我的程序里面。
我的程序现在是确定了的,只是在上面加一个 验证D盘硬盘码=程序给定值的过程
也就是我要编一段,自动 提取D盘硬盘码 然后 看 是否等于 给定值,(给定值我另外找),相等就执行下面
追答
假设a是你计算出来的给定值,下面的简单算法就是通过硬盘序列号-10000得到a的值
Private Sub Form_Load()
a = 12345678 '给定值
If GetSerialNumber("d") - 10000 a Then
MsgBox "你的程序........!" '或者什么也不提示
Unload Me '关闭程序
End If

End Sub

我的算法只是一个示例,你可以加一些复杂算法

原来你看不大懂代码啊,那你把源代码发到我的邮箱里,我给你加一个jlf629#139.com 由于百度不让输入@你自己改一下吧
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
拾剧海的蛙子6509
2011-09-10
知道答主
回答量:66
采纳率:0%
帮助的人:41.8万
展开全部
读取硬盘物理序列号,每个硬盘都有一个唯一的序列号
我这有个读取硬盘物理序列号和盘符的程序,要的话留个邮箱发给你
追问
这个程序我有。网上有下载

但是我不知道怎么把这个用到我程序中。
现在我程序结构是定了,只能把 提取硬盘码 当做是一个平常段落,然后硬盘码值和 用“你说的那种提取程序“提取的结果。(提取后我就编入程序,然后再生产exe给人家用) 比对。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
worksnfkpynn99
2011-09-10 · TA获得超过320个赞
知道答主
回答量:252
采纳率:0%
帮助的人:160万
展开全部
路过的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式