Club Delphi  
    FTP   CCD     Buscar   Trucos   Trabajo   Foros

Retroceder   Foros Club Delphi > Principal > Varios
Registrarse FAQ Miembros Calendario Guía de estilo Temas de Hoy

Grupo de Teaming del ClubDelphi

Respuesta
 
Herramientas Buscar en Tema Desplegado
  #1  
Antiguo 02-10-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
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.
__________________
Explicate como si fuese tonto, soy nuevo en esto de hacer programas!!!! XD
Responder Con Cita
  #2  
Antiguo 02-10-2007
betiitooo betiitooo is offline
Miembro
 
Registrado: sep 2007
Ubicación: chilpancingo, guerrero. mexico
Posts: 18
Poder: 0
betiitooo Va por buen camino
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)
Responder Con Cita
  #3  
Antiguo 02-10-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
Miedo no... pero la cosa es que no se hacer nada de eso en delphi :-(
__________________
Explicate como si fuese tonto, soy nuevo en esto de hacer programas!!!! XD
Responder Con Cita
  #4  
Antiguo 03-10-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
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.
__________________
Explicate como si fuese tonto, soy nuevo en esto de hacer programas!!!! XD
Responder Con Cita
  #5  
Antiguo 03-10-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
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.

Última edición por seoane fecha: 03-10-2007 a las 16:14:40. Razón: Error ortografico
Responder Con Cita
  #6  
Antiguo 03-10-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
gracias ahora mismo lo pruebo
__________________
Explicate como si fuese tonto, soy nuevo en esto de hacer programas!!!! XD
Responder Con Cita
  #7  
Antiguo 03-10-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
¿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.
__________________
Explicate como si fuese tonto, soy nuevo en esto de hacer programas!!!! XD
Responder Con Cita
  #8  
Antiguo 03-10-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
¿Leíste el código que te pase? ¿En que parte parte aparece esa linea?
Responder Con Cita
  #9  
Antiguo 03-10-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
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.
__________________
Explicate como si fuese tonto, soy nuevo en esto de hacer programas!!!! XD
Responder Con Cita
  #10  
Antiguo 03-10-2007
Avatar de seoane
[seoane] seoane is offline
Miembro Premium
 
Registrado: feb 2004
Ubicación: A Coruña, España
Posts: 3.717
Poder: 24
seoane Va por buen camino
Perdona, el corrector ortografico hizo de las suyas en mi mensaje.

Cambio PamaStr(0) por Parametro 0

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));
Responder Con Cita
  #11  
Antiguo 03-10-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
MUUUUUUUUUUUUUUUUUUUUUUUCHAS GRACIAS jeje ahora ya me va de lujo :-)
__________________
Explicate como si fuese tonto, soy nuevo en esto de hacer programas!!!! XD
Responder Con Cita
  #12  
Antiguo 03-10-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
Pos no, no me va :-( llamo a la función y no me muestra nada :-(
__________________
Explicate como si fuese tonto, soy nuevo en esto de hacer programas!!!! XD
Responder Con Cita
  #13  
Antiguo 08-10-2007
alaparte alaparte is offline
Miembro
 
Registrado: sep 2007
Posts: 10
Poder: 0
alaparte Va por buen camino
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
Responder Con Cita
  #14  
Antiguo 08-10-2007
Avatar de jorgegetafe
jorgegetafe jorgegetafe is offline
Miembro
 
Registrado: dic 2006
Posts: 238
Poder: 18
jorgegetafe Va por buen camino
Cita:
Empezado por alaparte Ver Mensaje
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 :-(
__________________
Explicate como si fuese tonto, soy nuevo en esto de hacer programas!!!! XD
Responder Con Cita
  #15  
Antiguo 08-10-2007
betiitooo betiitooo is offline
Miembro
 
Registrado: sep 2007
Ubicación: chilpancingo, guerrero. mexico
Posts: 18
Poder: 0
betiitooo Va por buen camino
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.
Responder Con Cita
Respuesta



Normas de Publicación
no Puedes crear nuevos temas
no Puedes responder a temas
no Puedes adjuntar archivos
no Puedes editar tus mensajes

El código vB está habilitado
Las caritas están habilitado
Código [IMG] está habilitado
Código HTML está deshabilitado
Saltar a Foro

Temas Similares
Tema Autor Foro Respuestas Último mensaje
ClientdataSet como saber si esta abierto? Coco_jac Varios 4 13-04-2012 19:36:43
Como averiguar si una unit o datamodule ya está abierto jjoliveras OOP 2 20-06-2007 11:28:56
Error:512 El motor de informes no está abierto Osorio Impresión 0 15-03-2007 22:17:40
Determinar si un archivo de texto esta abierto Ricardo León Varios 0 09-08-2005 16:34:28
Saber si esta abierto un documento Word Investment Servers 2 13-05-2004 12:02:26


La franja horaria es GMT +2. Ahora son las 17:59:45.


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
Copyright 1996-2007 Club Delphi