Inquiridor
Erros no corpo do código

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
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
- Editado Herbert Lausmann domingo, 13 de janeiro de 2013 10:40
-
-
-
Provavelmente onde você pegou esse código deve ter o restante...
Herbert Lausmann
-