Menú

Mostrar Mensajes

Esta sección te permite ver todos los mensajes escritos por este usuario. Ten en cuenta que sólo puedes ver los mensajes escritos en zonas a las que tienes acceso en este momento.

Mostrar Mensajes Menú

Mensajes - matarcola2

#11
Scripting / Re: Ayuda VBS, por favor!!!!
10 Mayo 2012, 08:22 AM
Hola, googleando me he encontrado estepost de Delphi:

Basicamente obtenemos el tiempo de CPU que lleva la aplicacion, esperamos unos milisegundos y volvemos a obtener el tiempo de CPU. La diferencia entre uno y otro nos permite el % de CPU que ha usado la aplicacion.

1.uses PsApi;
2.
3.function CPUTime(Path: String): Integer;
4.var
5.  Procesos: array[1..1024] of DWORD;
6.  Needed, i: DWORD;
7.  Process: THandle;
8.  ModName: array[0..MAX_PATH] of Char;
9.  CreationTime: FILETIME;
10.  ExitTime: FILETIME;
11.  KernelTime: FILETIME;
12.  UserTime: FILETIME;
13.  OldTime: int64;
14.begin
15.  Result:= 0;
16.  if EnumProcesses(@Procesos,SizeOf(Procesos),Needed) then
17.  begin
18.    for i:= 1 to (Needed div Sizeof(DWORD)) do
19.    begin
20.      Process := OpenProcess(PROCESS_QUERY_INFORMATION or PROCESS_VM_READ,
21.        FALSE,Procesos[i]);
22.      if Process <> 0 then
23.      begin
24.        if GetModuleFileNameEx(Process,0,ModName,SizeOf(ModName)-1)>0  then
25.        begin
26.          if StrIComp(ModName,PChar(Path)) = 0 then
27.          begin
28.            if GetProcessTimes(Process,CreationTime,ExitTime,KernelTime,UserTime) then
29.            begin
30.              OldTime:= int64(KernelTime) + int64(UserTime);
31.              Sleep(100);
32.              if GetProcessTimes(Process,CreationTime,ExitTime,KernelTime,UserTime) then
33.              begin
34.                Result:= (int64(KernelTime) + int64(UserTime) - OldTime) div 10000;
35.              end;
36.            end;
37.            // Solo usamos el primer proceso que encontramos
38.            break;
39.          end;
40.        end;
41.        CloseHandle(Process);
42.      end;
43.    end;
44.  end;
45.end;


Ejemplo de uso:


1.
2.ShowMessage(IntToStr(CPUTime('c:\windows\notepad.exe')));
3.


Si alguien supiese adaptarlo a un script que se ejecute desde una tarea programada pero en vez de mucho consumo de cpu en unos segundos controlase el poco consumo de cpu en determinado tiempo, ya lo tendríamos...
#12
Scripting / Re: Ayuda VBS, por favor!!!!
8 Mayo 2012, 10:26 AM
Hola a tod@s, por favor si alguien puede ayudarme a crear un VBS que compruebe regularmente si una aplicación (proceso en ejecución) de windows ha estado cierto tiempo inactiva (de procesador o peticiones de memoria) y en caso de haber estado inactiva xx minutos cerrar dicha aplicación.

La aplicación corre localmente en los equipos y consume licencia al estar abierta y conectarse al BDSERVER.

La razón es que la empresa en al que trabajo tenemos más usuarios que licencias (son caras) para un programa de gestión que utlizamos, pero no todos los usuarios necesitan el programa abierto toda la jornada. Incluso algunos usuarios lo abren por la mañana, se sacan la información que necesita y lo minimizan y no lo vuelven a utilizar hasta pasadas unas horas, de esta manera impidien que otros usuarios puedan entrar.

Mi idea sería distribuirlo por GPO (o no) como una tarea programada que ejecute un VBS regularmente que compruebe la inactividad del proceso (nombreprograma.exe) y si no se ha usado en ese equipo por ejemplo en xx minutos le haga un taskkill.

Hace algún tiempo, en algún lado había visto un código en VBS que comprobaba los procesos de windows en ejecución y el consumo de recursos (procesador, memoria, etc...) pero no he sabido como adaptarlo a lo que yo quiero, pero eso he recurrido a vosotros..

La cuestión es que si un usuario no ha utilizado el programa en 15-20 minutos es que no le ha hecho falta y podría haberlo utlizado otro usuario en su lugar.

Muchas gracias.

#13
Scripting / Re: Ayuda VBS, por favor!!!!
7 Mayo 2012, 13:30 PM
Hola.

Muchas gracias por tu respuesta.

La cuestión es que no controlo nada de dll´s, nombres de ventana, etc...

El programa se minimiza en la barra de tareas, pero eso no significa que ya se pueda cerrar, se tendría que cerrar al pasar 15 minutos, p.ej..

Despues de varios días buscando, en algún lado había visto un código en VBS que comprobaba los procesos de windows en ejecución y el consumo de recursos (procesador, memoria, etc...) pero no he sabido como adaptarlo a lo que yo quiero, pero eso he recurrido a este foro.

La cuestión es que si un usuario no ha utilizado el programa en 15-20 minutos es que no le ha hecho falta y podría haberlo utlizado otro usuario en su lugar.

Me da igual si es en VBS o un .bat.

Muchas gracias.
#14
Scripting / Ayuda VBS, por favor!!!!
7 Mayo 2012, 12:45 PM
Hola a tod@s, por favor si alguien puede ayudarme a crear un VBS que compruebe regularmente si una aplicación de windows ha estado cierto tiempo inactiva (de procesador o peticiones de memoria) y entonces se cierre.

La razón es que la empresa en al que trabajo tenemos más usuarios que licencias para un programa de gestión, pero no todos los usuarios necesitan el programa abierto toda la jornada. Incluso algunos usuarios lo abren por la mañana, se sacan la información que necesita y lo minimizan y no lo vuelven a utilizar hasta pasadas unas horas, de esta manera impidien que otros usuarios puedan entrar.

La cuestión mi idea es implantar por GPO (o no) una tarea programada que ejecute un VBS regularmente que compruebe la inactividad del proceso (nombreprograma.exe) y si no se ha usado por ejemplo en xx minutos le haga un taskkill.

Muchas gracias a todos.