Autor
|
Tema: Averiguar proceso de un archivo. (Leído 6,719 veces)
|
|
HaDeS, -
WarZone Master
Desconectado
Mensajes: 284
|
Se puede hacer que se listen todos los procesos, se haya la ruta de cada proceso y se compare con la ruta que necesitas, con archivo te referis a ejecutables no? bueno, yo tengo la medio idea de como hacer el code, si queres lo posteo, pero no es lo que pedis. (El code que pienso es listar los procesos y devolver ruta). Saludos
|
|
|
En línea
|
|
|
|
Freeze.
|
Lo que sucede es que no es asi es al reves. Tu dices: Hallar procesos Devolver la ruta
Yo digo: Obtener la ruta Hallar proceso de la ruta obtenida
De todas formas postea el codigo tal vez me sirve.
|
|
|
En línea
|
|
|
|
HaDeS, -
WarZone Master
Desconectado
Mensajes: 284
|
Bueno, lo que dije fue que no tenia la respuesta jajaj, pero idee una alternativa, y ya la habia posteado, primero se listan los procesos, los nombres o rutas de los procesos, y luego se compara con alguna string a ver si el proceso esta activo. checa este codigo, hasta el momento solo llevo la parte del nombre del ejecutable, si queres hago el de la ruta completa Option Explicit Private Const LETRAS As String = "abcdefghijklmnoñpqrstuvwxyz[].1234567890" 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 Command1_Click() Dim hSnapShot#, ProcesoC#, ResP#, ProcesoC2#, R#, uProcess As PROCESSENTRY32 hSnapShot = CreateToolhelp32Snapshot(&H2, 0&) uProcess.dwSize = Len(uProcess) R = Process32First(hSnapShot, uProcess) Do While R If LCase$(Limpiar(uProcess.szExeFile)) = LCase$(Text1.Text) Then MsgBox "Programa ejecutandose" Exit Sub End If R = Process32Next(hSnapShot, uProcess) Loop CloseHandle hSnapShot End Sub Private Function Limpiar(proceso$) Dim i% For i = 1 To Len(proceso) If InStr(1, LETRAS, Mid(proceso, i, 1), vbTextCompare) = 0 Then proceso = Replace(proceso, Mid(proceso, i, 1), "") End If Next i Limpiar = proceso End Function
en text1.text metes el proceso que queres buscar, por ejemplo "notepad.exe" saludos y espero que te sirva
|
|
« Última modificación: 25 Octubre 2007, 01:27 am por HaDeS, - »
|
En línea
|
|
|
|
abel_c_b
Desconectado
Mensajes: 91
|
hola hades, bueno por lo que veo y lo rapido que respondes eres una persona muy instruida en vb 6, te felicito, ahora yo tengo una duda con respecto a esto de los procesos:
con el codigo anterior, si quisiera saber el numero de identificacion que se le asigna a cada proceso, como lo sabria?
ademas, como lo compararia si la aplicacion es abierta mas de una vez, y como es logico van a tener numeros de identificacion de procesos diferentes, espero me haya explicado, saludos
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Colaborador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
ahora yo tengo una duda con respecto a esto de los procesos:
con el codigo anterior, si quisiera saber el numero de identificacion que se le asigna a cada proceso, como lo sabria?
En la estructura PROCESSENTRY32 hay un campo llamado th32ProcessID.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
HaDeS, -
WarZone Master
Desconectado
Mensajes: 284
|
Para comparar si la aplicación está abierta más de una vez, tenes dos vias, la primera es comparar nombres de los procesos, y la segunda añadir al código algo como: w = Limpiar(uProcess.szExeFile) Text1.Text = Text1.Text & vbCrLf & w & " - " & uProcess.th32ParentProcessID
En el bucle donde se inicia la búsqueda de los procesos. El th32ParentProcessID, sirve para indicar cual es el proceso padre de una aplicación, este te podría servir para observar si la aplicación esta abierta más de una vez. Saludos
|
|
|
En línea
|
|
|
|
Eternal Idol
Kernel coder
Colaborador
Desconectado
Mensajes: 5.966
Israel nunca torturó niños, ni lo volverá a hacer.
|
Una breve acotacion: el parent no es 100% confiable ya que los PIDs se reciclan.
|
|
|
En línea
|
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste. Juan Domingo Perón
|
|
|
HaDeS, -
WarZone Master
Desconectado
Mensajes: 284
|
Una breve acotacion: el parent no es 100% confiable ya que los PIDs se reciclan.
Por eso dije que se podian tomar dos vías, la primera comparar el nombre del proceso, aunque esta también es insegura, y la del parent id. Pensandolo mejor, se podría programar algo para que según el proceso me devuelva la ruta de donde se está ejecutando el programa, así, se podría comparar un proceso con diferente id. Saludos
|
|
|
En línea
|
|
|
|
Freeze.
|
se podría programar algo para que según el proceso me devuelva la ruta de donde se está ejecutando el programa.
Justo lo que yo quiero.!! PD: Se adueñaron de mi Post xD xD xD
|
|
|
En línea
|
|
|
|
|
|