博文

直接从RING3获取硬盘序列号(2005-10-11 20:57:00)

摘要:****************************************************************
'原作: 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
'http://lu0.126.com
'2000.11.3
'---*/
'*************************************************************************
'VB程序编制: BARDO
'本来我想写一个只取盘动物理序列号的。但是考虑到大家学习的方便。还是将原来的代码
'全部翻译了出来。如果你需要单一的只查一......

阅读全文(1496) | 评论:0

vb控制word的类模块,查找、替换Word文档内容(2005-10-11 20:56:00)

摘要:在VB6.0中,操作word,使用它强大的查找、替换、删除、复制、翦切功能。还可以把特定字符替换成图片。有了它你就可以使用数据库中的内容或图片文件替换word文件中的特定字符。   只要把下列内容复制到写字板中,另存为SetWord.cls文件,然后在把它添加到工程中,就可以使用了。 VERSION 1.0 CLASS
BEGIN
  MultiUse = -1  'True
  Persistable = 0  'NotPersistable
  DataBindingBehavior = 0  'vbNone
  DataSourceBehavior  = 0  'vbNone
  MTSTransactionMode  = 0  'NotAnMTSObject
END
Attribute VB_Name = "SetWord"
Attribute VB_GlobalNameSpace = False
Attribute VB_Creatable = True
Attribute VB_PredeclaredId = False
Attribute VB_Exposed = False
Private mywdapp As Word.Application
Private mysel As Object '属性值的模块变量
Private C_TemplateDoc As String
Private C_newDoc As String
Private C_PicFile As String
Private C_ErrMsg As Integer Public Event HaveError()
Attribute HaveError.VB_Description = "出错时激发此事件.出错代码为ErrMsg属性"
'***************************************************************
'ErrMsg代码:1-word没有安装 2 - 缺少参数&nbs......

阅读全文(4820) | 评论:0

MDB之Table输出到Word     (2005-10-11 20:53:00)

摘要:  一个简单的MDB之Table输出到Word的vb小程序,包括简单的查询、排序和分组功能。 欢迎批评交流cwxiao888@163.com Option Explicit
Dim DataType(100) As Integer
Dim SqlString As String
Dim OrderStr As String
Dim TalNaStr As String
Dim i As Integer
Dim MacroName As String
Private WordApp As Word.Application
Private doc As Word.Document
Private se1 As Word.Selection
Private db As Database
Private rs As Recordset
Private Sub CmdQuery_Click()
'On Error Resume Next
TalNaStr = Data1.Caption
'queryprintfrm.Data1.DatabaseName = datalistfrm.Text1.Text
'queryprintfrm.Data1.RecordSource = datalistfrm.Combo1.Text
'queryprintfrm.Data1.DatabaseName = datalistfrm.Text1.Text
queryprintfrm.Data1.RecordSource = datalistfrm.Combo1.Text
queryprintfrm.Data1.Refresh If Me.Exp1.Text = "Like" Then
OrderStr = FindField.Text
queryprintfrm.Data1.RecordSource = "select * from" + " " + TalNaStr + " " + "where" + " " + Me.FindField.Text + " " + "like" + " " + "'" + Me.Range1.Text + "'"......

阅读全文(6168) | 评论:0

在VB中使用WMI获取系统硬件和软件有关信息(2005-10-11 20:53:00)

摘要:  在VB中使用WMI获取系统硬件和软件有关信息 简介:       WMI是英文Windows Management
      Instrumentation的简写,它的功能主要是:访问本地主机的一些信息和服务,可以管理远程计算机(当然你必须要拥有足够的权限),比如:重启,关机,关闭进程,创建进程等。 实例如下: '用WMI,先工程-引用 Microsoft WMI Scripting V1.1 Library     获取显卡/声卡/内存/操作系统的信息    声卡信息 Private Sub wmiSoundDeviceInfo()    Dim wmiObjSet As SWbemObjectSet
   Dim obj As SWbemObject
  
   Set wmiObjSet = GetObject("winmgmts:{impersonationLevel=impersonate}"). _
                          InstancesOf("Win32_SoundDevice")
   On Local Error Resume Next
  
   For Each obj In wmiObjSet
      MsgBox obj.ProductName
   Next
End Sub   显卡信息 Private Sub wmiVideoControllerInfo()   ......

阅读全文(2378) | 评论:0

VB中删除、替换或者插入内容到文本(2005-10-11 20:51:00)

摘要:  VB中删除、替换或者插入内容到文本中某一行及解析文本行列的处理实例           VB操作文本文件的方法很多,下面的例子是我自己作项目或者回答网友提问时做的,很有代表性,希望能够给各位朋友一些启发. '功能:删除、替换文本中一行,或者插入内容到文本中某一行
'作者: soho_andy (冰)
'参数:
'strSourceFile  原始文件完整名
'strTargetFile  生成新文件的完整名
'intRow         操作的行数 Sub 操作文件中一行(strSourceFile As String, strTargetFile As String, intRow As Long)
    Dim filenum         As Integer
    Dim fileContents    As String
    Dim fileInfo()      As String
    Dim i               As Integer
    Dim j               As Integer
   
    filenum = FreeFile
    Ope......

阅读全文(2015) | 评论:0

用VB+WORD模版+数据库来制作格式合同的方法(2005-10-11 20:50:00)

摘要:  用VB+WORD模版+数据库来制作格式合同的方法   概述:在应用程序中经常有定制格式报表的需要,如打印合同、货物清单、备忘录等等,使用第三方报表软件可以实现但是比较繁琐,实际上利用Word的自动化编程,使用VBA可以完成类似的功能,而且很实用。   步骤一、 word模版制作:   在第一行是合同标题 " 【书签1合同标题xxxxxxxx合同】"   第二行                  ****************************** 合同编号: 【书签2合同编号】 签约单位: 【书签3签约单位】 签约地址: 【书签4签约地址】 签约日期: 【书签5签约日期】 ..... 表格第一行    '表格第一行第一列中插入 书签4 表格第二行 ... 货物名称 数量 规格 【书签6货物清单】         '实现代码如下   Dim cn As New ADODB.Connection Dim AdoRs As New ADODB.Recordset Dim WordTemps As New Word.Application   Private Sub Form_Load()     If cn.State = 1 Then         cn.Close     End If     cn.CursorLocation = adUseClient     cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\db1.mdb" End Sub ......

阅读全文(4051) | 评论:0

让你得密码框更安全(2005-10-11 20:48:00)

摘要:近来在设计一个热键设置程序中我学会了使用Setwindowlong和Callwindowproc这两个Api函数,有了它我们就可以处理你的窗口或控件所接收到的任何消息.由于前一段时间我看过一篇介绍QQ密码监视盗取法的文章,使我想到是不是可以用这两个函数来进行密码保护呢,经过一番尝试终于成功了,现在拿出来与大家分享。
    几乎所有的监视程序都是通过向你密码的文本框发送一条WM_GETTEXT消息来获取密码的,任何文本框只要接收到此消息它就会老老实实的把自己保存的内容告诉发送消息者(它可不知道它保存的是我们重要的密码呀), “*”号是不能保护我们的密码的,是不是可以做一个“聪明”一点的文本框呢,其实我们只需拦截此消息不让文本框接受到,任何监视程序也不能得到其中的密码。就是用Setwindowlong和Callwindowproc这两个Api函数来定义一个自己的消息处理函数,然后判断消息类型,如果是WM_GetText消息就排除在外,不处理它(当然了你也可以更换接受消息的对象来欺骗它),这样文本框接收不到这条消息当然就不会泄露秘密了。下面对只作一个简单的介绍:
Setwindowlong函数声明如下:
     Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long
作用:在窗口结构中为指定的窗口设置信息
参数: hwnd 要设置消息函数的窗口句柄(可以是控件)
      nIndex 我们用到的是:GWL_WNDPROC 设置窗口或控件的消息处理函数的地址  
      dwNewLong 消息函数的地址(就是在函数名前加Addressof,如 addressof winproc)
返回值:如果成功返回原来消息处理函数的地址,否则返回0
  Callwindowproc函数声明如下:......

阅读全文(2331) | 评论:0

VB+ADO检测数据库并发操作和处理并解决并发冲突(2005-10-11 20:45:00)

摘要: 前言:

数据库并发问题详述http://www.csdn.net/Develop/read_article.asp?id=24366已经说明了并发的严重性与危害性。下面讲述VB+ADO来处理并发操作的实际案例:

在以前DAO中可以对数据库进行记录锁,页面锁,表锁来处理并发操作,还可以使用事务处理,那么现在怎么用ADO来检测并处理数据库的并发操作呢?

相关背景知识:

ADO中对数据库的也是采用锁定的方法来实现的,还可以用事务来做。事务有个特点就是:要么全成功,要么就全失败。那么在实际工作中有可能只有几条或一小部分的记录有冲突,只要对那一小部分的记录进行处理就行了。ADO也使用来锁定来实现。

那么什么是锁定?

锁定是一种进程,DBMS 通过该进程限制多用户环境中对行的访问。当一行或一列被独占锁定时,不允许其他用户在释放锁定之前访问锁定的数据。这确保了两个用户无法同时更新一行中的同一列。

从资源角度而言,锁定的成本可能非常高昂,只有在需要保持数据完整性的情况下才应当使用此功能。在每秒有数百或数千用户试图访问某个记录的数据库(例如连接到 Internet 的数据库)中,不必要的锁定将很快导致应用程序性能的下降。

可选择适当的锁定选项来控制数据源和 ADO 游标库管理并发性的方式。

打开 Recordset 之前先设置 LockType 属性,以指定提供者打开它时使用的锁定类型。读取该属性以返回打开的 Recordset 对象中使用的锁定类型。

提供者可能不支持所有锁定类型。如果提供者不支持请求的 LockType 设置,则替换为另一种锁定类型。若要确定 Recordset 对象中实际可用的锁定功能,将soppurts 方法与 adUpdate 和 adUpdateBatch 一起使用。

如果 CursorLocation  属性设置为 adUseClient,则不支持 adLockPessimistic 设置。如果设置了不支持的值,将不产生错误,而使用所支持的最相近的 LockType。

LockType 属性在 Recordset 关闭时为读/写,而在 Recordse......

阅读全文(1681) | 评论:0

在VB的ListView中动态加载记录(2005-10-11 20:40:00)

摘要:在访问数据库时,经常会遇到记录数量过多,对数据列表进行初始化时耗费大量时间,使用户在进入界面时等待时间过长。为了解决这个问题,我们可以通过使用动态加载数据的方法来实现。 即当进行初始化时,只是加载少量的数据,使控件快速完成初始化,让用户在较短的时间内得到控制权,这时加载数据的多少可以根据实际情况进行设定;然后,当用户滚动视图的时候,我们检测其滚动的位置,判断是否需要继续加载数据,如果尚未显示的数据数量少于约定值,则继续加载一定量的数据,否则不作任何动作。这样一来,既可以实现所有数据的加载,又不影响用户的操作。 其实这种方法在VC中很容易实现,我们只要相应相应列表的WM_VSCROLL就可以了,但是在VB中,列表控件不直接支持这个消息,这就需要我们做一些额外的工作,以实现这一过程。我们似乎可以使用计时器控件定期对列表状态进行监视,从而实现改过程,但是这种方法不但影响系统运行速度,而且效果也不是很好,所以在这里我们仍然使用响应WM_VSCROLL消息的方法。 为了实现这一功能,首先是在VB中处理列表控件的消息。由于VB中无法直接处理我们所需要的消息,在这里我们就要用到一个API函数将列表控件的消息处理过程设置为我们自己定义的函数。这个API就是SetWindowLong,它的原型是 Public Declare Function SetWindowLong Lib "user32" Alias "SetWindowLongA" (ByVal hwnd As Long, ByVal nIndex As Long, ByVal dwNewLong As Long) As Long 它有三个参数: hwnd 是要设置的窗体句柄 nIndex 是要设置项目的索引,在这段程序里我们将其取值为GWL_WNDPROC dwNewLong 是要设置项目的值,在这段程序里就是我们自定义的消息处理函数的地址 它的返回值是一个长整数,是调用这个API之前对应项目的值,如果设置失败,则返回0,对于具体的错误信息可以调用GetLastError来获得,在这里它将返回原始的列表控件的消息处理函数的地址。 具体的做法如下所示: 1.       在现有的模块或新建立的模块中定义消息处理函数 消息处理函数应定义为下面的......

阅读全文(1743) | 评论:0

利用随机数加密字串的算法(2005-10-11 20:39:00)

摘要:        首先这个算法没什么特殊之处,只是怕以后找不到,所以放到了这上面         每个字节加密后有6种结果(占两个字节,如果需要大于6种的话,就要多用1个字节,即占3 个字节),也就是说如果字串占n个字节的话,可能产生的结果为6的n次方个,这个算法破解的强度不大,大家可以完善一下: '窗体上一个按钮,两个listbox
Option Explicit Private Sub Command1_Click()
    Dim i As Long
    Dim s As String
    For i = 1 To 100
        s = encode("这是一个测试 hello world")
        List1.AddItem s
        s = decode(s)
        List2.AddItem s
    Next
End Sub
Private Function encode(ByVal s As String) As String '加密
    If Len(s) = 0 Then Exit Function
    Dim buff() As Byte
    buff = StrConv(s, vbFromUnicode)
    Dim i As Long
    Dim j As Byte
&nb......

阅读全文(1640) | 评论:0