vb 如何时时监控内存中某个数据!

vb 如何时时监控内存中某个数据!,第1张

windows似乎不会在内存中的某个数据改变时发送知伍消芦桥息给窗口……

但是你又不想用timer,应该也不会想影响程序的工作吧。

给个方向性建议,建立一个新搭哗或的线程,然后让它运行一个过程,这个过程有一个循环,不断循环判断直到内存某数据改变。可以用sleep这个api函数来控制这个循环每次的间隔。这样就可以不影响前台工作。

你可以从外部终止这个线程,达到终止循环的目的

我这里就只说说实现原理,而不作详细的程序了。

首先是利用ToolHelp32工具枚举获取qq.exe所在的进程ID,

CreateToolhelp32Snapshot(), ProcessFirst32(), 等等,

然后根据所获得的进程ID,利用OpenProcess打开并取得其hProcess,

跟着读出该进程的数据区,利用ReadProcessMemory()实现(过程中应注意速度,作出筛选&优化)

尔后扫描所获得的数据"\msgex.db"的位置,前首派伍面的东东就是QQ号码了。

这是比较简单的方法,至于还有一些更好的,不过我这就不再多作羡岁冗言者或赘句了。

至于跟着怎么把他读出来显示在文本框上,Text1.Text = lpszQQNumber 就行了嘛。

‘获取当前的程序内肆燃和存占用(生成exe后运行):

Private Sub Timer1_Timer()

Dim myUsage As Double

myUsage = RamUsage

Label1.Caption = FormatUsage(myUsage) &"K (" &FormatUsage(myUsage / 1024) &" Mb)"

End Sub

Private Function RamUsage(Optional strProcess As String = "") As Double

If strProcess = "" Then strProcess = UCase(App.EXEName) &".EXE" 'Will count the current application as the process if no arguments given

Set objWMIService = GetObject("winmgmts:" &"{impersonationLevel=impersonate}!\裂盯\.\root\cimv2")

Set colProcessList = objWMIService.ExecQuery("SELECT * FROM Win32_Process WHERE Name='" &strProcess &"'")

For Each objProcess In colProcessList

RamUsage = objProcess.workingSetSize / 1024

Next

End Function

Private Function FormatUsage(tUsage As Double)

If Int(tUsage) = tUsage Then

If tUsage = 0 Then

FormatUsage = 0

Else

FormatUsage = Format(tUsage, "###,###")

End If

Else

FormatUsage = Format(tUsage, "段羡###,###.#")

End If

End Function


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12491234.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存