PDA

Ver la Versión Completa : Monitorear aplicacion desde delphi


gmendoza5426
21-05-2012, 00:32:49
Hola a todos.
Alguien me puede ayudar por favor para poder consultar desde delphi si una maquina que esta en mi red tiene o no ejecutando una aplicacion en particular, necesito obtener todas las maquinas que tienen ejecutando dicha aplicacion.

Desde ya muchas gracias

ajvdelphi
30-05-2012, 21:21:25
Hola
Podés probar con esto:


procedure TForm1.Button1Click(Sender: TObject);

function EstaEjecutandose (ExeFile:string): boolean;
var H:word;
begin
H := CreateFile(PChar(ExeFile), GENERIC_READ, 0, nil, OPEN_EXISTING, 0, 0);
Result := (H >= 65535);
CloseHandle(H);
end;


begin
if EstaEjecutandose ('c:\windows\notepad.exe')
then Label1.Caption:='SI/YES'
else Label1.Caption:='NO';

end;

Espero sirva
Saludos
Augusto
:)

maeyanes
30-05-2012, 21:30:08
Hola ajvdelphi

Bienvenido a los foros de Club Delphi, te recomiendo que le des una leida a la Guía de Estilo (http://www.clubdelphi.com/foros/guiaestilo.php).

Otra cosa, cuando publiques código fuente en Delphi, usa las etiquetas [delphi]:


begin
ProcedimientoAEjecutar;
Variable := 'hola mundo';
// ejemplo
end;


lo que se mostrará en los foros así:


begin
ProcedimientoAEjecutar;
Variable := 'hola mundo';
// ejemplo
end;



Saludos...

ajvdelphi
30-05-2012, 21:43:34
Hola maeyanes
Ok, entendido, ya me mandé dos, pero aprendí :):)

Saludos
Augusto

Casimiro Notevi
30-05-2012, 21:46:45
A ver si recordamos poner los tags al código fuente, ejemplo: ;)

http://neftali.clubdelphi.com/images/UtilizarTAGs.png

Gracias :)

gmendoza5426
30-05-2012, 23:21:24
Hola ajvDelphi
Antes que todo gracias por respuesta
Una consulta en que parte le indico la direccion IP de la maquina que quiero monitorear si tiene ejecutando mi sistema?
Porque el codigo que me pasaste ya lo encontre y funciona pero solo en la maquina localmente, lo que necesito es monitorear una maquina en particular conociendo su nombre o su direccion IP.

Gracias nuevamente

ajvdelphi
31-05-2012, 03:56:13
Hola.
Me habían pasado hace tiempo este código, que no probé, y se supone que puede detectar cualquier aplicacion inclusive si se está ejecutando en otra máquina, habrá que probar


Hay que agregar 'TLHelp32' en el uses de tu form

procedure TForm1.Button1Click(Sender: TObject);

function IsRunnig (FicheroExe:string):boolean;

function SacaExe(MangoW:HWND):string;
{Obtiene el EXE de una tarea}
{get EXE of a task}
var
Datos :TProcessEntry32;
hID :DWord;
Snap : Integer;
begin
GetWindowThreadProcessId(MangoW,@hID);
Snap:=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS,0);
try
Datos.dwSize:=SizeOf(Datos);
if(Process32First(Snap,Datos))then
begin
repeat
if Datos.th32ProcessID=hID then
begin
Result:=StrPas(Datos.szExeFile);
Break;
end;
until not(Process32Next(Snap,Datos));
end;
finally
Windows.CloseHandle(Snap);
end;
end;


function ObtieneVentanas(Mango: HWND;
ACerrar: Pointer): Boolean; stdcall;
begin
Result := True;
{Mango es el handle de la tarea encontrada}
{Si es el .EXE buscado, lo cierra}
if SacaExe(Mango)=UpperCase( String(ACerrar^) )then
begin
String(Acerrar^):='Encontrado';
end;
end;


begin
EnumWindows( @ObtieneVentanas, Integer(@FicheroExe) );
Result:=(FicheroExe='Encontrado');
end;

begin
if IsRunnig('C:\WINDOWS\NOTEPAD.EXE')
then ShowMessage ('Ejecutandose/Running')
else ShowMessage ('No Ejecutandose/Do not running');
end;


Espero te sirva, sino a seguir buscando!!!!

Saludos
Augusto
:)

escafandra
04-06-2012, 20:59:16
El código mostrado no trabaja en red.
La solución puede pasar por una App Cliente/Servidor..

En este hilo ( www.clubdelphi.com/foros/showthread.php?t=68270) se habla de funciones capaces de detectar si se ejecuta un proceso.


Saludos.