vb.net查看cpu vbs查看进程-成都创新互联网站建设

关于创新互联

多方位宣传企业产品与服务 突出企业形象

公司简介 公司的服务 荣誉资质 新闻动态 联系我们

vb.net查看cpu vbs查看进程

如何用VB.Net进行CPU温度读取

没有命令可以查看CPU温度,可以通过第三方软件鲁大师查看CPU温度:

创新互联是一家专业提供蓬安企业网站建设,专注与做网站、网站设计、H5场景定制、小程序制作等业务。10年已为蓬安众多企业、政府机构等服务。创新互联专业网站制作公司优惠进行中。

百度搜索鲁大师,并进行下载安装;

运行已安装的软件的,在界面中就能看到CPU温度:

VB中如何查看CPU窗口

在win nt,win 2000,win xp中都有一个性能查看器,我们可以用它来查看计算机上正在运行的程序,获得与程序相关的主窗口名,和查看cpu和内存,虚拟页面的使用情况。但是对于更高要求的计算机使用人员来说,这些是不够的,特别是一些diy的发烧友,他们希望自己可以随时对自己的计算机进行查看,了解更多的信息从而可以知道自己的计算机是否应该升级了,是否该对虚拟页面做出调整,是否该换cpu,还是增加内存。

由于以上情况,所以我们完全有理由做一个更好的查看器。在进行编写代码以前我们还需要知道一些基本知识,即proccess,thread,module。现在我们先来学习一下proecss的基本知识。

1.Proccss的概念

用最简短的话来说,进程就是当前运行的应用程序。运行的应用程序包括exe,dll这两种文件。文件和进程的差别在与,文件是保存在磁盘上的,是静止的,计算机不会去调用文件,而进程是非静止的,正是由于着个原因,所以计算机每调用一个进程就需要一定的资源。这些资源包括内存,虚拟页面,句柄,gdi……

在.net中我门可以用Process 类,(他位于System.Diagnostics空间中)提供对正在计算机上运行的进程的访问。使用 Process类,可以获取当前运行的进程的列表,或者启动新的进程。Process 类用于访问系统进程。初始化 Process类后,可使用该类来获取有关当前运行的进程的信息。此类信息包括线程集、加载的模块(.dll 和 .exe 文件)和性能信息(如进程当前使用的内存量)。

系统进程在系统上由其进程标识符唯一标识。与许多 Windows 资源一样,进程也由其句柄标识,而句柄在计算机上可能不唯一。句柄是表示资源标识符的一般术语。即使进程已退出,操作系统仍保持进程句柄,该句柄通过 Process 组件的 Handle 属性访问。因此,可以获取进程的管理信息,如 ExitCode(通常,或者为零表示成功,或者为非零错误代码)和 ExitTime。句柄是非常有价值的资源。

2. thread的概念

进程由一个或多个线程组成。换句话说线程是将进程分成了多个小的部分.每个线程都有优先级,在较高优先级的线程完成任务的时候,较低优先级的线程可能会被迫等待。在多处理器计算机上,将多个线程移到不同的处理器上,从而对 CPU 负荷进行平衡。每个进程启动时都具有一个线程,该线程称为主线程。任何线程都可创建其他线程。进程中的所有线程共享该进程的地址空间。

在.net中可以用System.Diagnostics的ProcessThread类来与进程获相关的线程信息.用System.Threading的Thread类来创建新线程.请注意Thread类不可以用来访问其他进程的线程,他只可以用来创建一个线程而已,一定要记住这点。如果你还想对线程进行更多的操作,可以用System.Diagnostics.ProcessThread类中返回的id,通过它作为api函数的参数来操作线程。

3. module的概念

模块指的是可执行文件或动态链接库 (DLL)。每个进程包含一个或多个模块。可以使用System.Diagnostics的ProcessModule类来获得有关模块的信息,这个类中有一个很有用的属性EntryPointAddress他可以返回获取在系统加载和运行模块时运行的函数的内存地址。然后用Visual Studio6.0中的工具,查看该地址就可以知道是什么函数!然后根据函数名查看相关的资料,就可以知道这个应用程序的基本编程思路,这个功能对程序员很有用。

了解了基本知识,现在就就可以编程了。首先建立一个窗口,在窗口上加上一个TabControl分页控件,在第一页加上label1,label2,listbox1,listbox2,button1。在第二页上加上label4,label6,listbox3,listbox4,在第三页上加上label5,label7,listbox5,listbox6。将所有的listbox控件的HorizontalScrollbar属性设置为true

然后添加如下代码(vb.net编写)

Public Class Form1

Inherits System.Windows.Forms.Form

Public zj

Public myProcesses() As Process

Public myProcess As Process

Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click

ListBox1.Items.Clear()

myProcesses = Process.GetProcesses()

For Each myProcess In myProcesses

ListBox1.Items.Add(myProcess.ProcessName)

Next

Label1.Text = ""

Label1.Text = "本机共有" ListBox1.Items.Count "个进程在运行"

End Sub

Private Sub ListBox1_DoubleClick(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ListBox1.DoubleClick

Dim i : Dim f As Integer : Dim h As Integer

ListBox2.Items.Clear()

zj = ListBox1.SelectedIndex

Label2.Text = "进程" ListBox1.Items.Item(zj) "的相关信息"

With ListBox2.Items

If myProcesses(zj).MainWindowTitle = "" Then

.Add("无相关主窗口")

Else

.Add(myProcesses(zj).MainWindowTitle)

End If

.Add(myProcesses(zj).BasePriority "进程的基本优先级")

.Add(myProcesses(zj).Handle.ToString "进程的本机句柄")

.Add(myProcesses(zj).HandleCount "进程打开的句柄数")

.Add(myProcesses(zj).Id "进程的唯一标识符")

.Add(myProcesses(zj).MachineName "进程正在其上运行的计算机的名称")

.Add(myProcesses(zj).MainModule.ToString "进程的主模块")

.Add(myProcesses(zj).MainWindowHandle.ToString "进程主窗口的句柄")

.Add(myProcesses(zj).Modules "")

.Add(myProcesses(zj).NonpagedSystemMemorySize "分配给此进程的未分页的系统内存大小")

.Add(myProcesses(zj).PagedMemorySize "分页的内存大小")

.Add(myProcesses(zj).PagedSystemMemorySize "分页的系统内存大小")

.Add(myProcesses(zj).PeakPagedMemorySize "峰值分页内存大小")

.Add(myProcesses(zj).PeakVirtualMemorySize "峰值虚拟内存大小")

.Add(myProcesses(zj).PrivateMemorySize "专用内存大小")

.Add(myProcesses(zj).StartTime "进程启动的时间")

.Add(myProcesses(zj).TotalProcessorTime.Seconds "进程的总的处理器时间")

.Add(myProcesses(zj).UserProcessorTime.Seconds "进程的用户处理器时间")

.Add(myProcesses(zj).VirtualMemorySize "进程的虚拟内存大小")

End With

ListBox3.Items.Clear()

TabPage1.Text = "进程" ListBox1.Items.Item(zj) "的基本信息"

TabPage2.Text = "进程" ListBox1.Items.Item(zj) "相关的线程信息"

TabPage3.Text = "进程" ListBox1.Items.Item(zj) "相关的模块信息"

/////////////////////////////////////////////

f = myProcesses(zj).Threads.Count

Label4.Text = "进程" ListBox1.Items.Item(zj) "共有" f "个相关的线程,线程ID信息如下:"

Dim int, pk, m, n

For n = 0 To f - 1

ListBox3.Items.Add(myProcesses(zj).Threads(n).Id)

Next

///////////////////////////////////////

ListBox5.Items.Clear()

Dim zha, kl

zha = myProcesses(zj).Modules.Count

Label5.Text = "与进程" ListBox1.Items.Item(zj) "共有" zha "个相关的模块,模块位置信息如下:"

For kl = 0 To zha - 1

ListBox5.Items.Add(myProcesses(zj).Modules(kl).FileName)

Next

End Sub

Private Sub ListBox3_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox3.DoubleClick

ListBox4.Items.Clear()

Dim f, n

f = myProcesses(zj).Threads.Count

n = ListBox3.SelectedIndex

Label6.Text = "线程" ListBox3.Items.Item(n) "相关信息"

With ListBox4.Items‘与进程相关的线程信息见System.Diagnostics.processThread类。因为Processes.threads属性是返回thread对象数组而thread对象数组的实例是由ProcessThread类来创建,thread对象数组的信息是包含在System.Diagnostics. ProcessThread类中。

.Add(myProcesses(zj).Threads(n).BasePriority)

.Add(myProcesses(zj).Threads(n).CurrentPriority)

.Add(myProcesses(zj).Threads(n).PriorityLevel)

.Add(myProcesses(zj).Threads(n).PrivilegedProcessorTime)

.Add(myProcesses(zj).Threads(n).StartTime)

.Add(myProcesses(zj).Threads(n).ThreadState.ToString)

.Add(myProcesses(zj).Threads(n).TotalProcessorTime.Seconds)

.Add(myProcesses(zj).Threads(n).UserProcessorTime.Seconds)

.Add(myProcesses(zj).Threads(n).WaitReason.ToString)

End With

End Sub

Private Sub ListBox5_DoubleClick(ByVal sender As Object, ByVal e As System.EventArgs) Handles ListBox5.DoubleClick

ListBox6.Items.Clear()

Dim f, n, m

f = myProcesses(zj).Modules.Count

n = ListBox5.SelectedIndex

Label7.Text = "模块" ListBox5.Items.Item(n) "相关信息"

With ListBox6.Items‘与进程相关的模块信息见System.Diagnostics. ProcessModule类,因为Processes.Modules属性是返回Modules对象数组而Modules对象数组的实例是由ProcessModule类来创建,Modules对象数组的信息是包含在System.Diagnostics. ProcessModule类中。

m = Hex(myProcesses(zj).Modules(n).BaseAddress.ToInt32)‘转换成16进制

.Add(m)

m = Hex(myProcesses(zj).Modules(n).EntryPointAddress.ToInt32)

.Add(m)

.Add(myProcesses(zj).Modules(n).FileVersionInfo)

.Add(myProcesses(zj).Modules(n).ModuleMemorySize)

.Add(myProcesses(zj).Modules(n).ModuleName)

End With

End Sub

End Class 这下就大工告成了,最后对程做一点补充说明,各位读者,当你知道了如何编写这个程序时,你可能会想如果只是写一个单纯的这个程序你可能会觉得没什么意义,那如何才可以将这段程序发挥他更大的意义?就让我来告诉你。其实这段代码并不是我刻意编写的,而是一个局域网中的远程控制的一部分。扫描客户机上运行的进程,查看客户机的资源,将获得的信息发个服务器,并可以通过Processes类来关闭客户机上的进程,以便管理者对客户机进行管理。此外写这篇文章的另一个目的是希望读者更快的掌握.net中System.Diagnostics.Process,System.Diagnostics.processThread,System.Diagnostics. ProcessModule类。在vb.net和win2000通过 。

vb.net如何获取当前进程的cpu和内存使用率?

使用wmi

类“Win32_Processor”中LoadPercentage属性为当前的cpu使用率

示例代码: Private Sub Timer1_Timer()

Dim WMI服务 As Object

Dim 对象 As Object

Dim 子对象 As Object

Dim 电脑名 As String

Dim 刷新 As Long

刷新 = 0

电脑名 = "." '表示本地计算机

Set WMI服务 = GetObject("winmgmts://" 电脑名 "/root/cimv2")

Set 对象 = WMI服务.InstancesOf("Win32_Processor")

Me.CurrentX = 0

Me.CurrentY = 0

For Each 子对象 In 对象

If 刷新 = 0 Then

刷新 = 1

Me.Cls

End If

Me.Print 子对象.Name "[" 子对象.CurrentClockSpeed "Hz] 使用率:" _

子对象.LoadPercentage "%"

Next

End Sub


网站标题:vb.net查看cpu vbs查看进程
当前URL:http://kswsj.cn/article/dogoipe.html

其他资讯