vbnet 进程监控,监控Acad开启的数量,并且添加到开机启动

1# 自定义函数,添加到注册表

 1 Public Sub StartRunRegHKLM()
 2 
 3         REM HKEY_LOCAL_MACHINE \ SOFTWARE \ WOW6432Node \ Microsoft \ Windows \ CurrentVersion \ Run
 4 
 5         Dim strName As String = Application.StartupPath + "\" + Application.ProductName + ".exe"
 6 
 7         Dim strNewName As String = System.IO.Path.GetFileNameWithoutExtension(strName)
 8         If Not System.IO.File.Exists(strName) Then Return
 9         Try
10             Dim Rkey As Microsoft.Win32.RegistryKey = Microsoft.Win32.Registry.LocalMachine.OpenSubKey("SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run", True)
11             If IsNothing(Rkey) Then
12                 Rkey = Microsoft.Win32.Registry.LocalMachine.CreateSubKey("SOFTWARE\\WOW6432Node\\Microsoft\\Windows\\CurrentVersion\\Run")
13                 Rkey.SetValue(strNewName, Chr(34) & strName & Chr(34)) '修改注册表,使程序开机时自动执行.
14             Else
15                 Rkey.SetValue(strNewName, Chr(34) & strName & Chr(34)) '修改注册表,使程序开机时自动执行。 
16             End If
17         Catch ex As Exception
18             MessageBox.Show(ex.Message, "StartRun") ' //MessageBox.Show(ex.Message);
19         End Try
20     End Sub
View Code

 2# timer 事件中写入处理机制,不笔者限制ACAD程序最多运行2个

 1 Private Sub Timer1_Tick(sender As Object, e As EventArgs) Handles Timer1.Tick
 2         Dim listacad = CheckAppProcess("acad"), proAcad As Process
 3         If listacad.Count > 2 Then
 4             Me.Timer1.Stop()
 5             If MessageBox.Show("进程数量超过服务器的载荷!请排队等候", "AutoCAD 报告", MessageBoxButtons.OK, MessageBoxIcon.Warning) = DialogResult.OK Then
 6                 For index = listacad.Count - 1 To 2 Step -1
 7                     proAcad = listacad(index)
 8                     If Not proAcad.HasExited Then proAcad.Kill()
 9                 Next
10                 Me.Timer1.Start()
11             End If
12         End If
13     End Sub
View Code

3# 读取进程的数量

 

1 Public Function CheckAppProcess(appName As String) As List(Of Process)
2         Dim pros As Process() = Process.GetProcesses()
3         Dim processAcad As List(Of Process) = New List(Of Process)()
4         For Each p As Process In pros
5             If p.ProcessName = "acad" Then processAcad.Add(p)
6         Next
7         Return processAcad
8     End Function
View Code

 4# 最后将相关的启动timer空间的语句写入到程序开始

 

1  Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
2         Me.Timer1.Interval = 3000
3         Me.Timer1.Start()
4     End Sub
View Code

运行开机启动需要提权到管理员权限

https://www.cnblogs.com/zbfamily/p/6269335.html

猜你喜欢

转载自www.cnblogs.com/NanShengBlogs/p/10973508.html