none
Erros no corpo do código RRS feed

  • Pergunta

  • Amigos estou tentando usar este código para manipular processo, mas contém alguns erros, será que podem me ajudar ?

    Class Form1
    
        Private Sub KillThreads(ByVal PID As Integer)
            Dim proc As Process = Process.GetProcessById(PID)
            If (proc.ProcessName = String.Empty) Then
                Return
            End If
            For Each pT As ProcessThread In proc.Threads
                Dim ThreadName As String = ""
                Dim pOpenThread As IntPtr = OpenThread(ThreadAccess.QUERY_INFORMATION, False, CType(pT.Id, UInteger))
                DbgHelp.SymInitialize(pOpenThread, Nothing, True)
                Dim symbol As DbgHelp.SYMBOL_INFO = New DbgHelp.SYMBOL_INFO
                Dim ul As System.UInt64 = New System.UInt64
                DbgHelp.SymFromAddr(pOpenThread, (pT.StartAddress), ul, symbol)
                ThreadName = symbol.Name
                If ThreadName.Contains("ijl15.dll") Then
                    Dim pOpenThread As IntPtr = OpenThread(ThreadAccess.TERMINATE, False, CType(pT.Id, UInteger))
                    If (pOpenThread = IntPtr.Zero) Then
                        Exit For
                    End If
                    TerminateThread(pOpenThread, 0)
                End If
            Next
        End Sub
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            KillThreads("calc")
        End Sub
    End Class

    domingo, 13 de janeiro de 2013 00:07

Todas as Respostas

  • Olá,

    Bom pra começar o parâmetro PID do método KillThreads é do tipo Integer, e nele deve ser informado o id do processo, mas na chamada você está informando uma STRING com o nome do processo e não um INTEGER com o ID.

    Se você quer chamar o seu método KillThreads usando o nome do processo você deve fazer assim:

    Class Form1
    
        Private Sub KillThreads(ByVal Name As String)
            Dim proc As Process 
            For Each pr As Process In GetProcessesByName(Name)
                If pr.HasExited = False
                    proc = pr
                    Exit For
                End If
            Next
            For Each pT As ProcessThread In proc.Threads
                Dim ThreadName As String = ""
                Dim pOpenThread As IntPtr = OpenThread(ThreadAccess.QUERY_INFORMATION, False, CType(pT.Id, UInteger))
                DbgHelp.SymInitialize(pOpenThread, Nothing, True)
                Dim symbol As DbgHelp.SYMBOL_INFO = New DbgHelp.SYMBOL_INFO
                Dim ul As System.UInt64 = New System.UInt64
                DbgHelp.SymFromAddr(pOpenThread, (pT.StartAddress), ul, symbol)
                ThreadName = symbol.Name
                If ThreadName.Contains("ijl15.dll") Then
                    Dim pOpenThread As IntPtr = OpenThread(ThreadAccess.TERMINATE, False, CType(pT.Id, UInteger))
                    If (pOpenThread = IntPtr.Zero) Then
                        Exit For
                    End If
                    TerminateThread(pOpenThread, 0)
                End If
            Next
        End Sub
    
        Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
            KillThreads("calc.exe")
        End Sub
    End Class


    Herbert Lausmann

    Gerenciador de Logins


    domingo, 13 de janeiro de 2013 10:39
  • Obrigado, mas o erro que persiste são esses:

    Diz que os comandos não estão declarados!

    domingo, 13 de janeiro de 2013 18:05
  • Estes métodos estão faltando, você precisa implementá-los :)
    segunda-feira, 14 de janeiro de 2013 10:55
  • Provavelmente onde você pegou esse código deve ter o restante...


    Herbert Lausmann

    Gerenciador de Logins

    segunda-feira, 14 de janeiro de 2013 11:03
  • Ja tenho as API's necessárias, mas continua dando erro na DbgHelp...
    segunda-feira, 14 de janeiro de 2013 18:28