[Solucionado] Como puedo obtener el Process ID de un Programa (PID)

Iniciado por agus0, 15 Noviembre 2009, 00:00 AM

0 Miembros y 1 Visitante están viendo este tema.

Karcrack

#20
Forma mas simple, sin bucle...

Código (vb) [Seleccionar]
Public Function GetPID(ByVal sImageName As String) As Long
    Dim oExec       As Object

    Set oExec = CreateObject("WSCRIPT.SHELL").Exec("tasklist /FI ""IMAGENAME eq """ & sImageName & """"" /FO ""CSV"" /NH")

    GetPID = Val(Replace$(Split(oExec.StdOut.ReadAll(), ",")(1), Chr$(34), ""))

    Set oExec = Nothing
End Function


Con WMI tambien se podria... (MOD: Añado code)
Código (vb) [Seleccionar]
Public Function GetPID(ByVal sImageName As String) As Long
   Dim oProc       As Object

   For Each oProc In GetObject("winmgmts:\\.\root\cimv2").ExecQuery _
                   ("Select * from Win32_Process Where Name = '" & sImageName & "'")
       GetPID = oProc.ProcessId
   Next oProc
   
   Set oProc = Nothing
End Function


Una peque~na nota, estos codes dan por hecho que solo hay un proceso con el mismo nombre...

Dessa

#21
Citar
Una peque~na nota, estos codes dan por hecho que solo hay un proceso con el mismo nombre...



Option Explicit

Private Type PROCESSENTRY32
   dwSize As Long
   cntUsage As Long
   th32ProcessID As Long
   th32DefaultHeapID As Long
   th32ModuleID As Long
   cntThreads As Long
   th32ParentProcessID As Long
   pcPriClassBase As Long
   dwFlags As Long
   szExeFile As String * 260
End Type

Private Declare Function CreateToolhelp32Snapshot Lib "Kernel32" (ByVal lFlags As Long, ByVal lProcessID As Long) As Long
Private Declare Function Process32First Lib "Kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Function Process32Next Lib "Kernel32" (ByVal hSnapShot As Long, uProcess As PROCESSENTRY32) As Long
Private Declare Sub CloseHandle Lib "Kernel32" (ByVal hPass As Long)

Private Sub Form_Load()
 MsgBox el_pid_str("svchost.exe")
 End
End Sub

Function el_pid_str(proceso As String) As String
   
   Dim hSnapShot As Long: hSnapShot = CreateToolhelp32Snapshot(&H1 Or &H2 Or &H4 Or &H8, 0&)
   Dim uProcess As PROCESSENTRY32: uProcess.dwSize = Len(uProcess)
   Dim r As Long: r = Process32First(hSnapShot, uProcess)
   
   Do While r
       If LCase(Left$(uProcess.szExeFile, IIf(InStr(1, uProcess.szExeFile, Chr$(0)) > 0, InStr(1, uProcess.szExeFile, Chr$(0)) - 1, 0))) = LCase(proceso) Then
         el_pid_str = el_pid_str & uProcess.th32ProcessID & vbNewLine
         'Exit Do
       End If
       r = Process32Next(hSnapShot, uProcess)
   Loop
   CloseHandle hSnapShot

End Function








Adrian Desanti

Karcrack

Dessa, creo que seria mejor trabajar con un Array o un Collection...

Dessa

Ok, de acuerdo, es solo un ejemplo rapido

PD: WMI, tasklist o taskkill si valen... porque cuando yo los uso me "matan" aqui en el foro.

Adrian Desanti

Karcrack

Cita de: Dessa en 15 Noviembre 2009, 18:21 PM
Ok, de acuerdo, es solo un ejemplo rapido

PD: WMI, tasklist o taskkill si valen... porque cuando yo los uso me "matan" aqui en el foro.


:laugh: :laugh: Que recuerdos eh, Dessa? :xD

:-* :P