Detectar la ejecución de una aplicación

Iniciado por naderST, 22 Junio 2008, 19:04 PM

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

naderST

Buenas quería saber como podría hacer esto?

SKL (orignal)

lista los procesos y agregale un IF, si el nombre del exe es igual al que estas buscando, que salte el error o lo que sea

naderST

Cita de: skullsp en 22 Junio 2008, 19:48 PM
lista los procesos y agregale un IF, si el nombre del exe es igual al que estas buscando, que salte el error o lo que sea

mmm pero quiero que detecte cualquier exe que se ejecute, no solo uno en específico.

SKL (orignal)

bue, es lo mismo pero agarra los ultimas 3 letras del programa y te va a decir si es un exe o una dll

Fr4NN^

mmm... puedes volcar todos los procesos a un list o a cualkier lado y comparar a cada rato con la del instante y si aparece uno nuevo podes capturar el nombre...
no parece ser dificil..

sientate un rato y fijate como lo puedes hacer xD

Saludos
Leyendo se aprende


Hendrix

Interceptar ejecutables

Es algo viejo este articulo, pero te podria servir.

Un Saludo  :)

"Todos los días perdemos una docena de genios en el anonimato. Y se van. Y nadie sabe de ellos, de su historia, de su peripecia, de lo que han hecho, de sus angustias, de sus alegrías. Pero al menos una docena de genios se van todos los días sin que sepamos de ellos". - Juan Antonio Cebrián

seba123neo

#6
tambien podes hacer algo asi:

Código (vb) [Seleccionar]
Option Explicit
Private Declare Function OpenProcess Lib "kernel32" (ByVal dwDesiredAccess As Long, ByVal bInheritHandle As Long, ByVal dwProcessId As Long) As Long
Private Declare Function CloseHandle Lib "kernel32" (ByVal hObject As Long) As Long
Private Declare Function EnumProcesses Lib "PSAPI.DLL" (lpidProcess As Long, ByVal cb As Long, cbNeeded As Long) As Long
Private Declare Function EnumProcessModules Lib "PSAPI.DLL" (ByVal hProcess As Long, lphModule As Long, ByVal cb As Long, lpcbNeeded As Long) As Long
Private Declare Function GetModuleBaseName Lib "PSAPI.DLL" Alias "GetModuleBaseNameA" (ByVal hProcess As Long, ByVal hModule As Long, ByVal lpFileName As String, ByVal nSize As Long) As Long
Private Const PROCESS_VM_READ = &H10
Private Const PROCESS_QUERY_INFORMATION = &H400

Private Function EstaCorriendo(ByVal NombreDelProceso As String) As Boolean
Const MAX_PATH As Long = 260
Dim lProcesses() As Long, lModules() As Long, N As Long, lRet As Long, hProcess As Long
Dim sName As String
NombreDelProceso = UCase$(NombreDelProceso)
ReDim lProcesses(1023) As Long
If EnumProcesses(lProcesses(0), 1024 * 4, lRet) Then
For N = 0 To (lRet \ 4) - 1
hProcess = OpenProcess(PROCESS_QUERY_INFORMATION Or PROCESS_VM_READ, 0, lProcesses(N))
If hProcess Then
ReDim lModules(1023)
If EnumProcessModules(hProcess, lModules(0), 1024 * 4, lRet) Then
sName = String$(MAX_PATH, vbNullChar)
GetModuleBaseName hProcess, lModules(0), sName, MAX_PATH
sName = Left$(sName, InStr(sName, vbNullChar) - 1)
If Len(sName) = Len(NombreDelProceso) Then
If NombreDelProceso = UCase$(sName) Then EstaCorriendo = True: Exit Function
End If
End If
End If
CloseHandle hProcess
Next N
End If
End Function

Private Sub Command1_Click()
MsgBox EstaCorriendo("calc.exe")
End Sub


esto es cualquiera es para uno solo.. :P

saludos.
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

naderST

Gracias a todos por sus respuesta, pero me voy con la respuesta de Hendriҳ