Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   verificar si una aplicacion esta corriendo (https://www.clubdelphi.com/foros/showthread.php?t=38440)

dblx 14-12-2006 17:42:50

verificar si una aplicacion esta corriendo
 
Hola amigos del foro...

Tengo una duda, quiero desarrollar una pequeña aplicación que cuente el tiempo que una aplicación dura corriendo, ejemplo: un usuario llega a la maquina inicia sesión, inicia CorelDraw 13, firefox 2.0, y Windows Messenger Live 8.0... Ahora lo que quiero es una función que me cuente el tiempo que dura cada aplicación corriendo, para saber si la persona pasa mas tiempo navegando o trabajando en el Corel, ¡AH! y otra cosa que se inicie cuando Windows inicie y que no salga el boton de la aplicación en la barra de tareas ni en la barra donde esta el reloj, sino que muestre solo cuando yo quiera ejecutando un comando en el cmd, sería posible hacer esto en delphi 7, se programar en delphi mas no se que funciones podria usar para esto seguro debe ser sencillo...

Gracias...:D

Bicho 14-12-2006 18:04:28

Hola,

antetodo respeta la guía de estilo, no debes hacer más de una pregunta sobre distintos temas en un mismo hilo, ya que eso no ayuda a posteriores búsquedas a gente que tenga el mismo problema / duda que tú.

Está bien que expongas tus objetivos, pero de forma separada. Tampoco quieras que aquí te hagamos ese trabajo, lo suyo es que vayas haciendo y cuando te encuentres estancado preguntes.

Respecto a tu duda.
Es posible, creo que no hay inconveniente en casi ningún punto. Y el nivel de dificultad, depende, cada apartado depende unos son más sencillos y otros más difíciles.

Espero replantees tu pregunta, para que entonces te podamos ayudar.

Saludos

seoane 14-12-2006 18:05:50

Te recomiendo para esto hacer un servicio, no se mostrara ni en la barra de tareas ni en ningún otro lado, solo en la lista de procesos, pero eso es inevitable. Aunque si una persona va a ser investigada, a mi me parece que lo mas correcto es que se le informe primero, de hecho creo que podría ser incluso ilegal hacer eso si no se le informa primero, da igual que sea tu ordenador y el trabaje para ti, aunque si hay algún abogado por aquí que me corrija si me equivoco.

Con respecto a ver que programas utiliza, solamente tendrías que revisar periódicamente los procesos en ejecución, y a partir de hay calcular el tiempo que esta encendido cada programa.

dblx 14-12-2006 18:15:20

Bicho disculpa lo de la guia de estilo, pero soy novato en estos de los foros, solo acostumbro a ver mas no a dejar mensajes, y busque bastante y no encontre sobre este tema, por eso todas las preguntas... y no quiero que me hagan el trabajo si no solo necesito las funciones necesarias para desarrollar la aplicacion, solo eso pido... Gracias y disculpas

Neftali [Germán.Estévez] 14-12-2006 18:16:11

Cita:

Empezado por seoane
...solamente tendrías que revisar periódicamente los procesos en ejecución, y a partir de hay calcular el tiempo que esta encendido cada programa.

Aunque piensa que eso te dará el tiempo que el programa está abierto, que no es lo mismo que el programa que se está utilizando. Si se va a comer y se deja abiertas la ventana del Explorer y la ventana del Corel, no estará trabajando en ninguna de las dos, en cambio en ambas estará contando el tiempo.

"Discernir" en cual de ellas está trabajando realmente se me antoja más difícil; No se si utilizando estrategias similares a las de los KeyLoguers, no se si detetando las ventanas que están en primer plano (se me acaba de ocurrir), no se si detetando el nivel de CPU del proceso (se me acaba de ocurrir y además no creo que funcione), no se si hay en Windows alguna forma de saber la Ventana (y por ende) la aplicación activa en cada momento (creo que sí debe haberla), o algua otra que no se me ocurre; Aunque ninguna de ellas me parece sencilla.

En el tema de "espiar" opino de forma similar a Seoane.

dblx 14-12-2006 18:22:44

Neftali, la persona que tengo en la maquina trabajando no se para de ahii, desde las 8:00 am hasta las 12:00 pm, la aplicación que quiero desarrollar es para monitorear si realmente me esta trabajando en el corel... por eso el nunca va a saber que esa aplicación esta instalada...

Neftali [Germán.Estévez] 14-12-2006 18:27:47

Cita:

Empezado por dblx
Neftali, la persona que tengo en la maquina trabajando no se para de ahii, desde las 8:00 am hasta las 12:00 pm, la aplicación que quiero desarrollar es para monitorear si realmente me esta trabajando en el corel... por eso el nunca va a saber que esa aplicación esta instalada...

???????
O yo no te entiendo o tú no me entendiste.

seoane 14-12-2006 18:28:52

Cita:

Empezado por Neftali
"Discernir" en cual de ellas está trabajando realmente se me antoja más difícil; No se si utilizando estrategias similares a las de los KeyLoguers, no se si detetando las ventanas que están en primer plano (se me acaba de ocurrir), no se si detetando el nivel de CPU del proceso (se me acaba de ocurrir y además no creo que funcione), no se si hay en Windows alguna forma de saber la Ventana (y por ende) la aplicación activa en cada momento (creo que sí debe haberla), o algua otra que no se me ocurre; Aunque ninguna de ellas me parece sencilla.

Lo que se me antoja mas difícil en este caso es definir lo que es trabajo y no lo es, me explico, es solo trabajo cuando se teclea o se mueve el ratón, o también lo se si esta leyendo un texto en pantalla, o se esta realizando una tarea que necesita un procesamiento largo. Como dice neftali, como podríamos distinguir si alguien esta leyendo un manual, o editando un vídeo, o se fue a tomar un café.

La cosa seria sencilla si aceptásemos que trabajar implica movimiento de ratón o pulsaciones de teclado, un simple hook a nivel global, colocado en una dll no tiene problemas en saber sobre que proceso se esta "trabajando" de hecho seria algo trivial.

:p La eterna duda, se puede estar trabajando sin moverse, solo pensando ...

dblx 14-12-2006 18:30:06

Neftali, para mi estaria bien detectar las ventanas de estas aplicaciones, en visual basic es algo como AppActive ó algo asi, quiero una funcion paralela pero en delphi, que me detecte la ventana de la aplicacion y yo vere como inicio un contador de tiempo... Gracias

kalisto 14-12-2006 23:21:17

titulo de la ventana activa
 
Código Delphi [-]
function VentanaActiva: String;
var  PC: Array[0..$FFF] of Char;
     Wnd : Thandle;
begin
    {$IFDEF Win32}
    Wnd := GetForegroundWindow;
    {$ELSE}
    Wnd := GetActiveWindow;
    {$ENDIF}
    SendMessage( Wnd , $000D , $FFF , LongInt( @PC ) ); //$000D es el WM_GETTEXT
    Result := PC;
end;

dblx 15-12-2006 01:16:12

Kalisto, gracias por responder, el codigo que colocaste...

Como lo uso man??? que es $FFF... $000... ??? direcciones de memoria???

dblx 15-12-2006 01:27:00

[b]kalisto[\B], gracias nuevamente por tu codigo, pero solo me detecta el "caption" de la ventana que este activa en el momento, no me referia a eso, quiero que mi aplicacion detecte el "exe" que este corriendo, es decir cuando "firefox.exe" se ejecute mi aplicación dispare un timer que cuente cuanto tiempo dura corriendo, y no solo la que este activa...

Gracias...

dblx 15-12-2006 01:29:31

Kalisto... aunque pensandolo bien aqui viendo, me di cuenta que cuando una ventana esta activa es porque se esta trabajando sobre ella, disculpa amigo, me diste un gran fragmento de código muy bueno gracias de verdad, doy por terminada mi duda... muchas gracias :)


La franja horaria es GMT +2. Ahora son las 01:25:02.

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