PDA

Ver la Versión Completa : Saber si se esta ejecutando un programa externo


jcaballeroo
01-04-2005, 19:36:25
Hola, necesito una función que me diga si un programa externo esta abierto, ha de funcionar en cualquier S.O. Windows (NT/95/98/ME/XP/2000/2003AV).

Toñico
05-04-2005, 18:01:58
Hola, creo que este código te servirá. Está escrito en el create del formulario. He usado una variable boolean global que me indica si existe o no el programa.




procedure TFormulario.FormCreate(Sender: TObject);
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;
Nada: Pointer): Boolean; stdcall;
var
sTemp:string;
begin
Result := True;
{Mango es el handle de la tarea encontrada}
{Añadimos el .EXE si no está ya añadido...}
sTemp:=SacaExe(Mango);
If sTemp = 'Nombre_del_ejecutable.exe' then bExistePrograma := True;
end;
begin
bExistePrograma := False;
EnumWindows( @ObtieneVentanas, 0 );
end;





Un saludo.