Título: [Solucionado] Como puedo obtener el Process ID de un Programa (PID) Publicado por: agus0 en 15 Noviembre 2009, 00:00 am Buenas foro!...
Como andan? les traigo una dudilla como puedo obtener el PID: Process ID de un programa??? si puede ser por el nombre del mismo, yo la unica forma que conozco para obtenerlo es asi: Código: Private Sub Command1_Click() Dim PID As String PID = Shell(Environ("windir") & "\system32\calc.exe", vbNormalFocus) MsgBox "El Process ID de la calculadora es: " & PID, vbInformation, "Obtener PID" End Sub pero yo lo que necesito no es obtener el PID de un Programa que yo ejecute si no que necesito obtener el PID de uno que este abierto. Muchas Gracias! Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: YST en 15 Noviembre 2009, 00:11 am Esto te podria servir ;)
http://www.recursosvisualbasic.com.ar/htm/listado-api/183-listar-ruta-de-procesos-de-windows.htm Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: agus0 en 15 Noviembre 2009, 00:42 am M... no me sirve pòr que con eso obtenes un array y yo necesito buscarlo por nombre del proceso o algo asi
Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: h0oke en 15 Noviembre 2009, 01:03 am GetProcessId() ?
Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: agus0 en 15 Noviembre 2009, 01:09 am Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: YST en 15 Noviembre 2009, 01:14 am GetProcessId() ? Necesitas el handle del proceso :¬¬Por cierto agus0 sabes programar en VB por que aqui no damos codigos hechos ;) Lo que te pase sirve perfectamente si lo adaptas Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: agus0 en 15 Noviembre 2009, 01:19 am GetProcessId() ? Necesitas el handle del proceso :¬¬Por cierto agus0 sabes programar en VB por que aqui no damos codigos hechos ;) Lo que te pase sirve perfectamente si lo adaptas Si se VB pero me da fiaca :P no mentria. Se pero no soy "DIOS" con el VB no quiero el codigo pero orientame un poquito mas aunque sea :-( :-( Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: h0oke en 15 Noviembre 2009, 01:49 am Citar GetProcessId() ? :xD No entendí por qué la carita. En msdn nos dice lo siguiente:Necesitas el handle del proceso :¬¬ Citar DWORD WINAPI GetProcessId( __in HANDLE Process ); Por supuesto que se necesita el HANDLE. En cuanto a agus0, buscando encontré lo siguiente: http://www.vbforums.com/showthread.php?t=262384 EDIT: YST disculpa, si di a entender mal el GetProcessID()(es decir en vacío), solo fue para orientar a agus0 y que investigara sobre tal función. Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: [Zero] en 15 Noviembre 2009, 01:53 am Código: http://www.recursosvisualbasic.com.ar/htm/trucos-codigofuente-visual-basic/42.htm#2 Saludos Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: YST en 15 Noviembre 2009, 01:58 am Citar GetProcessId() ? :xD No entendí por qué la carita. En msdn nos dice lo siguiente:Necesitas el handle del proceso :¬¬ Citar DWORD WINAPI GetProcessId( __in HANDLE Process ); Por supuesto que se necesita el HANDLE. En cuanto a agus0, buscando encontré lo siguiente: http://www.vbforums.com/showthread.php?t=262384 EDIT: YST disculpa, si di a entender mal el GetProcessID()(es decir en vacío), solo fue para orientar a agus0 y que investigara sobre tal función. Lo que me refiero es que no sabe ni listar los procesos y va a saber sacar el handle :¬¬ Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: seba123neo en 15 Noviembre 2009, 02:00 am 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. Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: h0oke en 15 Noviembre 2009, 02:03 am Citar Lo que me refiero es que no sabe ni listar los procesos y va a saber sacar el handle :xD Disculpas. Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: Jaixon Jax en 15 Noviembre 2009, 02:19 am Código: 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 .... ;) Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: Dessa en 15 Noviembre 2009, 03:53 am Hola Agus, te sirve por intermedo del Hwnd de la ventana (FindWiindows) ???
Código: 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 Código: 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 Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: cobein en 15 Noviembre 2009, 08:52 am La respuesta es CreateToolhelp32Snapshot si queres averiguar el PID a travez del nombre. Te daria el code pero me da "fiaca".
Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: Dessa en 15 Noviembre 2009, 13:31 pm Código: 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 ? Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: NikNitro! en 15 Noviembre 2009, 13:33 pm Si está abierto... no te valdría con un simple control+alt+supr??? :-\
Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: Karcrack en 15 Noviembre 2009, 15:00 pm Si está abierto... no te valdría con un simple control+alt+supr??? :-\ Estamos en la sección de 'Programacion VB'...Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: NikNitro! en 15 Noviembre 2009, 15:03 pm 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 Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: agus0 en 15 Noviembre 2009, 16:24 pm 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 Si está abierto... no te valdría con un simple control+alt+supr??? :-\ Estamos en la sección de 'Programacion VB'...Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: Karcrack en 15 Noviembre 2009, 16:36 pm Forma mas simple, sin bucle...
Código
Con WMI tambien se podria... (MOD: Añado code) Código
Una peque~na nota, estos codes dan por hecho que solo hay un proceso con el mismo nombre... Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: Dessa en 15 Noviembre 2009, 17:59 pm Citar Una peque~na nota, estos codes dan por hecho que solo hay un proceso con el mismo nombre... Código: 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 Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: Karcrack en 15 Noviembre 2009, 18:13 pm Dessa, creo que seria mejor trabajar con un Array o un Collection...
Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: 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. Título: Re: [Ayuda] Como puedo obtener el Process ID de un Programa (PID) Publicado por: Karcrack en 15 Noviembre 2009, 22:12 pm Ok, de acuerdo, es solo un ejemplo rapido :laugh: :laugh: Que recuerdos eh, Dessa? :xDPD: WMI, tasklist o taskkill si valen... porque cuando yo los uso me "matan" aqui en el foro. :-* :P |