1

我正在构建一个应用程序,以便在运行特定程序时将我的 Skype 状态更改为忙。我尝试了以下代码:

Private Sub WaitTimer_Tick(sender As Object, e As EventArgs) Handles WaitTimer.Tick
        For Each Me.Process In Process.GetProcesses(My.Computer.Name)
            On Error Resume Next
            If Process.ProcessName = Process.ProcessName = "SCII" Then
                skype.Changeuserstatus(TUserStatus.cusAway)
                Button1.Text = "SCII is running"
                Exit Sub
            End If
        Next
        Button1.Text = "SCII is not running"
    End Sub

每当我运行它时,它总是说 SCII 是打开的,而它不是。我究竟做错了什么?除了计时器之外,还有更好更有效的方法来检查正在运行的进程吗?

作为旁注,我导入 Skype4COMLib。

4

3 回答 3

2

这就是问题 :

If Process.ProcessName = Process.ProcessName = "SCII" Then

它应该是 :

If Process.ProcessName = "SCII" Then
于 2013-03-09T15:30:41.473 回答
1

问题是On Error Resume Next。这是在 if 语句中恢复的。由于比较(Process.ProcessName = Process.ProcessName) = "SCII"总是引发异常,因此您总是在第一个循环的 if 内恢复。

On Error Resume Next如果您不希望出现错误,请考虑将其删除,或者如果出现错误,请考虑将其替换为try catch块。

于 2013-03-09T15:32:37.463 回答
0

如果从所有正在运行的进程中找到一个进程,这会在消息框中告诉您。如果进程正在运行,它将在几秒钟左右显示出来。

Sub CheckIfRunning()
    Dim pList() As System.Diagnostics.Process = System.Diagnostics.Process.GetProcesses
    For Each proc As System.Diagnostics.Process In pList
        If proc.ProcessName.ToString = "App".ToString Then
              MsgBox(proc.ProcessName.ToString & " Found")
        End If
    Next
End Sub
于 2021-06-09T20:41:36.693 回答