正好我写个一个函数封装在DLL里了,代码是这样的:
成都创新互联是一家集网站建设,兴安企业网站建设,兴安品牌网站建设,网站定制,兴安网站建设报价,网络营销,网络优化,兴安网站推广为一体的创新建站企业,帮助传统企业提升企业形象加强企业竞争力。可充分满足这一群体相比中小企业更为丰富、高端、多元的互联网需求。同时我们时刻保持专业、时尚、前沿,时刻以成就客户成长自我,坚持不断学习、思考、沉淀、净化自己,让我们为更多的企业打造出实用型网站。
''' summary
''' 检查进程是否运行
''' /summary
''' param name="ProcessName"要检查的进程名/param
''' returns/returns
''' remarks/remarks
Public Function CheckProcessByName(ByVal ProcessName As String) As Boolean
Dim MgmtClass As New ManagementClass("Win32_Process")
Dim rtnVal As Boolean = False
Dim mo As New ManagementObject()
For Each mo In MgmtClass.GetInstances()
If mo("Name").ToString().ToLower() = ProcessName.ToLower() Then
rtnVal = True
End If
Next
Return rtnVal
End Function
知道PID的话:
''' summary
''' 返回所有窗口句柄
''' /summary
''' returns/returns
''' remarks/remarks
Public Function ListAllProcessesHandle() As String
Dim sb As New StringBuilder()
Dim p As New Process()
For Each p In Process.GetProcesses(".")
Try
If p.MainWindowTitle.Length 0 Then
sb.Append("句柄:" + p.MainWindowHandle.ToString() + Environment.NewLine)
End If
Catch
End Try
Next
Return sb.ToString()
End Function
窗口隐藏进程总有吧,函数调用的参数是进程名,不是窗口名。
函数是自己写的没有调用API
可以进“任务管理器” 两个步骤确定程序是否处于假死。 1,在“应用程序”里面,是否能切换该程序,如果不行,可以假定程序死机。 2,在“进程”中找到该程序,看CPU和内存使用,的数据有没有变化,如果20秒不变化,说明假死。
Imports System.Runtime.InteropServices
Module Module1
Sub Main()
Dim instance As Process = RunningInstance()
If instance IsNot Nothing Then
ShowWindowAsync(instance.MainWindowHandle, 3) '调用api函数,正常显示窗口
Return
End If
Dim F1 As New Form1
Application.Run(F1) '显示窗体
End Sub
DllImport("User32.dll")
Public Function ShowWindowAsync(ByVal hWnd As System.IntPtr, ByVal cmdShow As Integer) As Boolean
End Function
Private Function RunningInstance() As Process '返回进程中已经打开的程序
Dim current As Process = Process.GetCurrentProcess()
Dim processes As Process() = Process.GetProcessesByName(current.ProcessName)
For Each process As Process In processes
If process.Id current.Id Then
If process.MainModule.FileName = current.MainModule.FileName Then
Return process
End If
End If
Next
Return Nothing
End Function
End Module
VB.net(VS2008)里面比C#还好弄,不需要自己加manifest,直接在项目属性的“应用程序”里面点击“查看UAC设置”,在新打开的app.manifest里面把 requestedExecutionLevel level="asInvoker" uiAccess="false" / 替换成 requestedExecutionLevel level="requireAdministrator" uiAccess="false" / 再编译就行了。
用process.GetProcesses()
或者process.GetProcessByid() 获取进程信息,
这个提供进程即可以判断程序是否已经启动
这个是最一般的方法了
希望能帮到你