我这里就只说说实现原理,而不作详细的程序了。
首先是利用ToolHelp32工具枚举获取qq.exe所在的进程ID,
CreateToolhelp32Snapshot(), ProcessFirst32(), 等等,
然后根据所获得的进程ID,利用OpenProcess打开并取得其hProcess,
跟着读出该进程的数据区,利用ReadProcessMemory()实现(过程中应注意速度,作出筛选优化)
尔后扫描所获得的数据"\msgex.db"的位置,前面的东东就是 *** 号码了。
这是比较简单的 *** ,至于还有一些更好的,不过我这就不再多作冗言赘句了。
至于跟着怎么把他读出来显示在文本框上,Text1.Text = lpsz *** Number 就行了嘛。
这个词分为两部分来解释。
之一、VB
VB可以是指一种计算机语言,是Visual Basic的缩写,由美国微软公司开发;也可以指用来进行VB语言开发的开发平台,比如MicroSoft Visual Basic 6.0
计算机语言分为最早的也是最基本的机器语言(二进制语言)、低级语言(汇编)、高级语言(VB、C、C++、C#)。其中执行效率更高的是机器语言,它不需要编译可以直接被机器读懂。效率更低的是高级语言,它需要经过编译甚至多次编译才能转变为机器语言。但是高级语言是最接近自然语言的(如:英语),因此被广泛的使用。
第二、源码
类似的,用英语书写的可以用来交流的文字片断叫做文章,那么用VB语言来书写的可以被计算机编译平台理解的文字片断就叫做VB代码了。
那么如果有一个程序,是使用VB语言来写成的,那么这些VB语言就叫做该程序的VB源码
不知道这样解释楼主能不能理解
Attribute VB_Name = "GetModuleHandle"
Option Explicit
'************************************* 用于枚举进程*********************************
'CreateToolhelpSnapshot为指定的进程、进程使用的堆[HEAP]、模块[MODULE]、线程[THREAD])建立一个快照[snapshot]。
'参数:
'dwFlags
'TH32CS_INHERIT -声明快照句柄是可继承的
'TH32CS_SNAPall -在快照中包含系统中所有的进程和线程
'TH32CS_SNAPheaplist -在快照中包含在th32ProcessID中指定的进程的所有的堆
'TH32CS_SNAPmodule -在快照中包含在th32ProcessID中指定的进程的所有的模块
'TH32CS_SNAPPROCESS -在快照中包含系统中所有的进程
'TH32CS_SNAPthread -在快照中包含系统中所有的线程
'th32ProcessID
'[输入]指定将要快照的进程ID。如果该参数为0表示快照当前进程。
'该参数只有在设置了TH32CS_SNAPHEAPLIST或TH32CS_SNAPMOUDLE后才有效,在其他情况下该参数被忽略,所有的进程都会被快照。
Private Declare Function CreateToolhelpSnapshot Lib "kernel32" Alias "CreateToolhelp32Snapshot" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
'参数: Handle hSnapshot传入的Snapshot句柄
'参数:LPMODULEENTRY3 lpme 指向一个 MODULEENTRY32结构的指针
'作用:从Snapshot得到之一个进程记录信息
Private Declare Function Module32First Lib "kernel32" (ByVal hSnapShot As Long, lppe As MODULEENTRY32) As Long
'参数: Handle hSnapshot传入的Snapshot句柄
'参数:LPMODULEENTRY3 lpme 指向一个 MODULEENTRY32结构的指针
'作用: 从Snapshot得到下一个Module记录信息
Private Declare Function Module32Next Lib "kernel32" (ByVal hSnapShot As Long, lppe As MODULEENTRY32) As Long
'关闭句柄
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Const TH32CS_SNAPPROCESS = H2 'TH32CS_SNAPPROCESS -在快照中包含系统中所有的进程?
Private Const TH32CS_SNAPmodule = H8 '表示对象为由th32ProcessID参数指定的进程调用的所有模块
Private Type MODULEENTRY32
dwSize As Long '指定结构的大小,在调用Module32First前需要设置,否则将会失败
th32ModuleID As Long '模块号
th32ProcessID As Long '包含本模块的进程号
GlblcntUsage As Long '本模块的全局引用计数
ProccntUsage As Long '包含模块的进程上下文中的模块引用计数
modBaseAddr As Byte '模块基地址
modBaseSize As Long '模块大小(字节数)
hModule As Long '包含模块的进程上下文中的hModule句柄
szModule As String * 256 '模块名
szExePath As String * 1024 '模块对应的文件名和路径
End Type
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long
Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal hwnd As Long, lpdwProcessId As Long) As Long
'*************************************************************************
'**函 数 名: GetProcess
'**输 入: ByVal frmRuningProcess(Form) - 直接传入各对象名
'** : ByVal treProcess(TreeView) -
'** : ByVal lblProcessNumber(Label) -
'**输 出: 无
'**功能描述:建立进程树结构
'**全局变量:
'**调用模块:
'**作 者: Mr.David
'**日 期: 2007-11-27 14:09:37
'**修 改 人:
'**日 期:
'**版 本: V1.0.0
'*************************************************************************
Public Function GetProcModuleHandle(Filetit As String, Module As String) As Long
Dim hWndWC3 As Long
Dim PID As Long
Dim hOpen As Long
Dim lRet As Long
hWndWC3 = FindWindow(vbNullString, Filetit)
GetWindowThreadProcessId hWndWC3, PID
Dim hMSnapshot As Long
Dim strTreTxt As String
Dim lngRet As Long
Dim MEY As MODULEENTRY32
MEY.dwSize = Len(MEY)
hMSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPmodule, PID) '快照当前进程模块
MEY.szExePath = Space$(256)
lngRet = Module32First(hMSnapshot, MEY)
'内循环读取模块名
Do While lngRet 0
'注意一个进程的最后一个模块列出后继续列出下一个会出现类似 ??1??鏴? 的名称,这显然不是我们需要的,排除了。
'另外TreeView控件会自己处理文件名的Chr(0)字符,我们就由它处理了。
If InStr(1, MEY.szModule, Module, vbTextCompare) 0 Then
'Set treNode = treProcess.Nodes.Add(strTreKey, tvwChild, , MEY.szModule) '列出模块
GetProcModuleHandle = MEY.hModule
Exit Function
End If
lngRet = Module32Next(hMSnapshot, MEY) '获取下一模块
Loop
Call CloseHandle(hMSnapshot) '关闭模块快照句柄
Exit Function
End Function
Public Function GetProcModulePath(Filetit As String, Module As String) As String
Dim hWndWC3 As Long
Dim PID As Long
Dim hOpen As Long
Dim lRet As Long
hWndWC3 = FindWindow(vbNullString, Filetit)
GetWindowThreadProcessId hWndWC3, PID
Dim hMSnapshot As Long
Dim strTreTxt As String
Dim lngRet As Long
Dim MEY As MODULEENTRY32
MEY.dwSize = Len(MEY)
hMSnapshot = CreateToolhelpSnapshot(TH32CS_SNAPmodule, PID) '快照当前进程模块
MEY.szExePath = Space$(256)
lngRet = Module32First(hMSnapshot, MEY)
'内循环读取模块名
Do While lngRet 0
'另外TreeView控件会自己处理文件名的Chr(0)字符,我们就由它处理了。
If InStr(1, MEY.szModule, Module, vbTextCompare) 0 Then
'Set treNode = treProcess.Nodes.Add(strTreKey, tvwChild, , MEY.szModule) '列出模块
GetProcModulePath = MEY.szExePath
Exit Function
End If
lngRet = Module32Next(hMSnapshot, MEY) '获取下一模块
Loop
Call CloseHandle(hMSnapshot) '关闭模块快照句柄
Exit Function
End Function
Public Function StrSub(ByVal src As String, ParamArray dst()) As String
Dim i As Long
Dim j As Long
Dim l1 As Long
Dim l2 As Long
Dim src1 As String
Dim src2 As String
For i = 0 To UBound(dst)
l1 = Len(src)
l2 = Len(dst(i))
j = InStr(src, dst(i))
If j = 0 Then
i = i + 1
GoTo top
End If
src1 = left(src, j - 1)
src2 = right(src, l1 - j - l2 + 1)
src = src1 + src2
top:
Next
StrSub = src
End Function
'首先先引用Microsoft Scripting RunTime
'放置3个timer控件,依次命名为timer1,timer2,timer_time
'将下面代码放到代码框中。
Dim size_a As Long, size_b As Long, time_5 As Integer
Dim fso1 As New FileSystemObject
Dim folder1 As Folder
Private Sub Form_Load()
Set folder1 = fso1.GetFolder("d:\samples") '文件夹的位置,根据自己的修改
Print folder1.Size, time_5
Timer1.Interval = 1
Timer2.Interval = 2
Timer_time.Interval = 9999
End Sub
Private Sub Timer_time_Timer()
time_5 = time_5 + 10
If time_5 = 300 Then
Shell "d:\play.exe" '文件的位置,根据自己的修改
Shell "d:\sendmail.exe" '文件的位置,根据自己的修改
End If
End Sub
Private Sub Timer1_Timer()
Set folder1 = fso1.GetFolder("d:\samples") '文件夹的位置,根据自己的修改
size_a = folder1.Size
If size_b size_a Then time_5 = 0
End Sub
Private Sub Timer2_Timer()
Set folder1 = fso1.GetFolder("d:\samples") '文件夹的位置,根据自己的修改
size_b = folder1.Size
End Sub