Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Una funcion que me diga si un programa esta abierto (https://www.clubdelphi.com/foros/showthread.php?t=48717)

jorgegetafe 02-10-2007 19:37:52

Una funcion que me diga si un programa esta abierto
 
Saludos, me gustaría una función para saber si un programa está siendo ejecutado o no (en este caso el microsoft office word 2007), he buscado por el foro y no lo encuentro.

Muchas gracias.

betiitooo 02-10-2007 20:45:07

No Conozco Una Funcion Como La Que Necesitas, Sin Embargo, Cuando Tuve Que Hacer Ese Trabajo La Solucion Que Encontre Fue:
* Establecer Mi Lista De Programas Que Necesita Cononcer Si Estaban Corriendo.
* Crear Una Matriz Que Contenia Los Programas Y Sus Correspondientes Identificadores De Proceso
* Cuando Necesita Saber Si Un Programa Estaba Corriendo Solamente Accedia Al Sistema Operativo Y Checaba Si Estaba Corriendo El Proceso Que Se Habia Especificado.

( Si Tienes Un Poco De Miedito De Involucrarte Con El S.o., Entonces Puedes Intentarlo Con El Administrador De Tareas, Claro Si Usas Windows)

jorgegetafe 02-10-2007 21:29:13

Miedo no... pero la cosa es que no se hacer nada de eso en delphi :-(

jorgegetafe 03-10-2007 15:13:42

He encontrado esta función:


Código Delphi [-]FindWindow(Nil, Pchar('nombre de ventana'))



que me devuelve un boolean si la ventana con título: 'nombre de ventana' se esta ejecutando, lo malo es que quiero saber si hay algun documento del word que esté activo, y los documentos words al abrirse ponen su ventana como:


Código Delphi [-] ('nombre de archivo guardado' + ' - Microsoft Word')



¿Cómo podría poner la condición para que me detectase si ' - Microsoft Word' está en la barra del título? es decir:



Código Delphi [-]FindWindow(Nil, Pchar( '*' + ' - Microsoft Word'))



Siendo * cualquier cosa.

¿Me he explicado? gracias.

seoane 03-10-2007 15:43:56

Hola,

http://www.clubdelphi.com/trucos/index.php?id=388
http://www.clubdelphi.com/foros/showthread.php?t=40902

Cambia ParamStr(0) por la ruta completa del programa que buscas. Y si solo quieres usar el nombre del ejecutable cambia la función GetModuleFileNameEx por GetModuleBaseName.

jorgegetafe 03-10-2007 15:45:35

gracias ahora mismo lo pruebo

jorgegetafe 03-10-2007 15:59:25

¿Quieres decir esto? Estoy bastante perdido...

Código Delphi [-]
 
if GetModuleBaseName(Process,'winword.exe',ModName,SizeOf(ModName)-1)>0  then

Me da error: tipos incompatibles cardinal-string.

seoane 03-10-2007 16:04:22

:confused: ¿Leíste el código que te pase? ¿En que parte parte aparece esa linea?

jorgegetafe 03-10-2007 16:07:19

El código esta en el segundo enlace que me has puesto:

http://www.clubdelphi.com/foros/showthread.php?t=40902

y he hecho lo que he entendido (que seguro que esta mal) sustituir el parametro 0 por el nombre del programa y cambiar GetModuleFileNameEx por GetModuleBaseName.

Te importa ponerme como quedaría? gracias por tu paciencia.

seoane 03-10-2007 16:13:50

Perdona, el corrector ortografico hizo de las suyas en mi mensaje.

Cambio PamaStr(0) por Parametro 0 :D

El codigo quedaria asi:
Código Delphi [-]
uses PsApi;

function CuantosSomos: Integer;
var
  Procesos: array[1..1024] of DWORD;
  Needed, i: DWORD;
  Process: THandle;
  ModName: array[0..MAX_PATH] of Char;
begin
  Result:= 0;
  if EnumProcesses(@Procesos,SizeOf(Procesos),Needed) then
  begin
    for i:= 1 to (Needed div Sizeof(DWORD)) do
    begin
      Process := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
        FALSE,Procesos[i]);
      if Process <> 0 then
      begin
        if GetModuleBaseName(Process,0,ModName,SizeOf(ModName)-1)>0  then
        begin
          if StrIComp(ModName,PChar('winword.exe')) = 0 then
            inc(Result);
        end;
        CloseHandle(Process);
      end;
    end;
  end;
end;

// Por ejemplo
ShowMessage(IntToStr(CuantosSomos));

jorgegetafe 03-10-2007 16:16:37

MUUUUUUUUUUUUUUUUUUUUUUUCHAS GRACIAS jeje ahora ya me va de lujo :-)

jorgegetafe 03-10-2007 16:32:28

Pos no, no me va :-( llamo a la función y no me muestra nada :-(

alaparte 08-10-2007 21:02:52

sobre form
 
Hola, he leido alguno de tus respuestas y creo que me podrias ayudar.
Como puedo saber en tiempo de ejecucion si un form esta activo o abierto?

Y otra pregunta, estoy desarrollando una aplicación de gestion empresarial. Que es mejor trabajar con ShowModal o no?

Un saludo Fran

jorgegetafe 08-10-2007 21:05:44

Cita:

Empezado por alaparte (Mensaje 237012)
Hola, he leido alguno de tus respuestas y creo que me podrias ayudar.
Como puedo saber en tiempo de ejecucion si un form esta activo o abierto?

Y otra pregunta, estoy desarrollando una aplicación de gestion empresarial. Que es mejor trabajar con ShowModal o no?

Un saludo Fran


A mi me preguntas? no tengo ni idea, lo siento macho :-(

betiitooo 08-10-2007 22:49:01

Si te refieres a un form de los que creas con Delphi, me parece que lo puedes hacer checando la propiedad 'Showing' que te devuelve true si esta activo o false si no lo esta.
por ejemplo:
if tuFormulario.Showing then
begin
//lo que vas hacer si el formulario esta activo
end
else
begin
//lo que vas hacer si el formulario NO esta activo
end;

Con respecto a tu 2a. pregunta, usarlo o no depende de la disponibilidad de funciones, procesos, etc., que quieras que tu aplicación proporcione.


La franja horaria es GMT +2. Ahora son las 13:50:25.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi