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

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

0 Miembros y 2 Visitantes están viendo este tema.

seba123neo

pero el quiere por el "NOMBRE DEL PROCESO" ya lo dijo. y si se puede hacer, es mas ya postie en otro lado un codigo que cierra un proceso a traves de su nombre, o sea es lo mismo que buscas, porque al querer cerrarlo averigua su PID a travez del nombre y se lo pasa a TerminateProcess...por eso buscando como cerrar un ejeuctable a travez del nombre podes encontrar lo que estas buscando.usando
CreateToolhelpSnapshot,ProcessNext,OpenProcess.aparte hay varios ejemplos en C++ de lo que queres que no son dificiles de pasar a visual basic y son re cortos.
La característica extraordinaria de las leyes de la física es que se aplican en todos lados, sea que tú elijas o no creer en ellas. Lo bueno de las ciencias es que siempre tienen la verdad, quieras creerla o no.

Neil deGrasse Tyson

h0oke

CitarLo que me refiero es que no sabe ni listar los procesos y va a saber sacar el handle

:xD Disculpas.

Jaixon Jax

HANDLE handle=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
PROCESSENTRY32 procinfo={sizeof(PROCESSENTRY32)};
while(Process32Next(handle,&procinfo))
{
  if(strcmp(procinfo.szExeFile,"micosa.exe")==0)
{
pid=procinfo.th32ProcessID ;                               }
                                }
                 }


Esta en c++ Pasate por la MSDN para que lo entiendas ....  ;)

Dessa

#13
Hola Agus, te sirve por intermedo del Hwnd de la ventana (FindWiindows) ???



Option Explicit

Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal Hwnd As Long, lpdwprocessid As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Sub Command1_Click()

 Shell "calc"
 
 Dim Handle As Long: Handle = FindWindow("Scicalc", vbNullString)
 Dim idProc As Long: Call GetWindowThreadProcessId(Handle, idProc)
 
 MsgBox idProc

End Sub







Option Explicit

Private Declare Function GetWindowThreadProcessId Lib "user32" (ByVal Hwnd As Long, lpdwprocessid As Long) As Long
Private Declare Function FindWindow Lib "user32" Alias "FindWindowA" (ByVal lpClassName As String, ByVal lpWindowName As String) As Long

Private Sub Command1_Click()

  'explorer
 
  Dim Handle As Long: Handle = FindWindow("Progman", "Program Manager")
  Dim idProc As Long: Call GetWindowThreadProcessId(Handle, idProc)
 
  MsgBox idProc

End Sub











Adrian Desanti

cobein

La respuesta es CreateToolhelp32Snapshot si queres averiguar el PID a travez del nombre. Te daria el code pero me da "fiaca".
http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.

Dessa




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("csrss.exe")
  End
End Sub

Function el_pid(proceso As String) As Long
   
    Dim hSnapShot As Long, uProcess As PROCESSENTRY32
    hSnapShot = CreateToolhelp32Snapshot(&H1 Or &H2 Or &H4 Or &H8, 0&)
    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 = uProcess.th32ProcessID
          Exit Do
        End If
        r = Process32Next(hSnapShot, uProcess)
    Loop
    CloseHandle hSnapShot

End Function



Agus, aclarale al foro que lo de "me da fiaca" fue un chiste... no ?

Adrian Desanti


Karcrack

Cita de: NikNitro en 15 Noviembre 2009, 13:33 PM
Si está abierto... no te valdría con un simple control+alt+supr??? :-\
Estamos en la sección de 'Programacion VB'...

NikNitro!

a lo siento, pero pensaba que a veces el camino más facil es el mejor

De todos modos, tranquilos, dejo el post..

S@lu2

agus0

Gracias a todos. Ya esta solucionado.

Lo de me da fiaca obviamente que es mentira, es mas puse "me da fiaca, no mentira" obviamente que si lo supiera hacer no ubiera solicitado ayuda.

P.D: Fue muy gracioso el comentario anterios
Cita de: Karcrack en 15 Noviembre 2009, 15:00 PM
Cita de: NikNitro en 15 Noviembre 2009, 13:33 PM
Si está abierto... no te valdría con un simple control+alt+supr??? :-\
Estamos en la sección de 'Programacion VB'...
JAJA