Foro de elhacker.net

Programación => Programación Visual Basic => Mensaje iniciado por: byway en 10 Abril 2009, 20:38 pm



Título: Como mantener procedimiento en ejecucion?
Publicado por: byway en 10 Abril 2009, 20:38 pm
bueno como dice la pregunta como mantener un procedimiento en ejecucion.. aunque suena simple... pero la idea es tener un procedimiento se ejecute o este pendiente siempre .. pero que no consuma recursos de microprocesador ni memoria .. lo que tengo es :

todo el procedimento en un timer y lo ejecuto cada segundo, pero este me consumia de 3 a 5 % de procesador en la pc testeada.. lo optimize un poco y ahora consume de 2 a 3 % del procesador, pero cada segundo esta asi...

que es lo que hace el procedimento? 

pues lee una lista de un archivo donde tengo una lista de nombres de aplicaciones indeseables que no quiero se ejecuten en la pc y con un findwindow lo encuentro en memoria y lo finalizo, y asi puedo seguir agregando nombres en la lista de programas con sus nuevas versiones...

y todo ese procedimiento se repite cada segundo... y aqui el detalle aveces se consume mucha cpu y eso no esta bien..

como puedo cambiar o evitar el uso de un timer o temporizador ... o si es posible de hacer algun tipo de procedimento (como un hook) no se casi nada de eso, pero bueno almenos optimizar el bucle.

aki esta mi codigo optimizado, cargo la lista a un listbox y de con esa lista hago la buskeda en memoria..

Código
  1. Private Sub listar()
  2. On Error GoTo error
  3. Dim linea As String
  4. Dim linea2 As String
  5. Open "data.db" For Input As #2
  6. Do Until (EOF(2))
  7.    Line Input #2, linea
  8.    linea2 = Encrypt(linea)
  9.    List1.AddItem linea2
  10. Loop
  11. Close (2)
  12. Exit Sub
  13. error:
  14. Close (2)
  15.  
  16. End Sub

y el procedimento de buskeda con un timer a 1000 ms:

Código
  1. Private Sub Timer1_timer()
  2. On Error Resume Next
  3. Dim i As Integer
  4. Dim proceso As String
  5. total = List1.ListCount - 1
  6. For i = 0 To total
  7. proceso = List1.List(i)
  8. CerrarProceso (proceso)
  9. Next i
  10. End Sub

y se que la pregunta no esta bien formulada, no se me ocurrio ponerle otro titulo.
y si me diras busca en google.. pues ya busque y no encontre nada con lo que busco.

EDIT: sobre lo que optimize es que la lista ya lo tengo dentro del programa en un listbox y asi me evito estar cargandolo cada vez y asi reduci el uso del cpu.

Me olvide mencionar si se puede hacer como los antivirus .. estan pendientes de lo que se ejecuta, y cuando sucede eso recien inicia la buskeda .. algo asi como revisando si hay cambios en la memoria.

Saludos.








Título: Re: Como mantener procedimiento en ejecucion?
Publicado por: LeandroA en 10 Abril 2009, 23:43 pm
Hola, si en efectivo un hook seria mejor, se que Cobein había hecho un modulo para ir vijilando los sucesos de ejecución pero no se si tengo dicho modulo.
por otro lado la forma en la que testeas la lista con un listbox es un mas lento, osea te conviene usar un array o una colección,  y no llamar  a cerrar todos estos procesos, ya que por lo que veo no verificas si esta en ejecución, lo que seria conveniente es que listes los procesos en ejecución y después compares cada uno, si coincides cierras el proceso.

Saludos


Título: Re: Como mantener procedimiento en ejecucion?
Publicado por: byway en 11 Abril 2009, 00:21 am
Hola, si en efectivo un hook seria mejor, se que Cobein había hecho un modulo para ir vijilando los sucesos de ejecución pero no se si tengo dicho modulo.
por otro lado la forma en la que testeas la lista con un listbox es un mas lento, osea te conviene usar un array o una colección,  y no llamar  a cerrar todos estos procesos, ya que por lo que veo no verificas si esta en ejecución, lo que seria conveniente es que listes los procesos en ejecución y después compares cada uno, si coincides cierras el proceso.

Si ya lo habia visto eso de usar un array, es mas en las primeras veces lo usaba pero me limitaba a solo las lineas que declaraba .. bueno de la forma simple que lo hacia... y opte por cargar todo en un control y recorrer este .. pero consume mucha cpu y como dices no verifica si esta abierto el proceso .. directamente lo cierra.. eso de listar los procesos no se me ocurrio, pero lo ideal seria vigilar la lista de procesos y si este cambia recien inicie todo el procedimento.

empezare a buscar info sobre el tema de procesos en ejecucion, saludos.