Evitar ejecucion de programa.

Iniciado por Gorky, 24 Mayo 2006, 17:36 PM

0 Miembros y 1 Visitante están viendo este tema.

Gorky

Buenas foreros. Me preguntaba si seria posible evitar que un programa se ejecute. Pero no mirar cada cierto tiempo si dicho programa esta en ejecucion y matarlo. Sino algo asi como interceptar que se va a ejecutar y evitarlo. Dudo mucho que se pueda hacer o al menos en VB. Si alguien tiene una idea al respecto por favor compartidla.

Krnl64

Si se puede. Puedes buscar  la clase de la ventana abierta y despues enviarle un mensaje WM_SYSCOMMAND y SC_CLOSE.

De esta manera, no cierras el proceso sino que impides la ejecucion de esa clase.

Un ejemplo



''Coded by Krnl64
'' Conserva esta cabecera por favor

Const gcClassnameMSIExplorer = "IEFrame" '' clase del Internet Explorer

Const SC_CLOSE = &HF060&
Const WM_SYSCOMMAND = &H112
Dim cerrar&

cerrar = FindWindow(gcClassnameMSIExplorer, vbNullString)

if cerrar <> NULL then

Call SendMessage(cerrar, WM_SYSCOMMAND, SC_CLOSE, ByVal 0&)

end if



Espero haberte servido de ayuda.

Salu2




Eternal Idol

Cita de: Gorky en 24 Mayo 2006, 17:36 PM
Buenas foreros. Me preguntaba si seria posible evitar que un programa se ejecute. Pero no mirar cada cierto tiempo si dicho programa esta en ejecucion y matarlo. Sino algo asi como interceptar que se va a ejecutar y evitarlo. Dudo mucho que se pueda hacer o al menos en VB. Si alguien tiene una idea al respecto por favor compartidla.

Podes hacerlo en modo Usuario: tenes que inyectar codigo en todos los procesos e interceptar la funcion de creacion (CreateProcess).
La economía nunca ha sido libre: o la controla el Estado en beneficio del Pueblo o lo hacen los grandes consorcios en perjuicio de éste.
Juan Domingo Perón

Gorky

Muchas gracias. Pues es algo que creia que no se podia hacer.

Krnl64 no estoy muy familiarizado con las clases. Las he oido nombrar en muchas ocasiones pero no se exactamente lo que son. Por lo poco que se puedo intuir que es algo como una libreria: un mismo elemento comun que usan varios programas. Y si mi intuicion es correcta, si impides la ejecucion de una clase no se cerraran tambien el resto de procesos que dependan de ella?
Tal vez haya hecho una mala conclusion pero espero que me saques de la duda.

Eternal Idol creo que es mas ortodoxa la opcion de Krnl64.

Krnl64

Gorky, mira es sencillo.

Evidentemente, si restringes el uso de una clase, todas las aplicaciones que la usen no funcionarán o funcionarán parcialmente.

Una clase es como un módulo .BAS solo que tiiene extension .CLS

La diferencia entre ambas es que el módulo .BAS contiene funciones,  procedimientos y contstantes que tu aplicación puede usar.

Mientras que el modulo de clase .CLS  estan todos los procedimientos, funciones, métodos y propiedades que ese objeto posee.

El S.O. las contiene en alguna DLL pero no se en cual.

Un ejemplo para que lo entiendas.

Ya has estado trabajando con clases.

Cuando añades 1 form nuevo al proyecto,  tienes disponibles las propiedades Name, Caption, Appearance, etc

Y tambien los métodos Show, Hide, Move, Refresh, etc

Estas propiedades y métodos estan almacenados en una clase llamada ThunderRT6Main.

Si creas 1 aplicacion con 1 form y 1 commandbutton para salir de ella, al ver las clases que usa el proyecto, te saldran
las clases ThunderRT6Main y ThunderRT6Commandbutton.

VB nos permite desarrollar clases propias con eventos, métodos, propiedades, etc o mejorar las existentes

Espero haberte ayudado

Salu2










Gorky

Perfecto Krnl64. Muchas gracias por la aclaracion. Ahora unas preguntas:

1.- Como puedo ver las clases que usa un programa ya compilado?

2.- Una vez que tenga la lista de clases que usa, deberia elegir una que, o bien haya sido diseñada por los creadores de ese software para que no la use nadie mas, o bien una que use poco comun. Me equivoco?

3.- Si restrinjo el uso de una clase, el proceso que quiero que no arranque y todos los que esten haciendo uso de ella, que les ocurre? Se cierran sin mas? Dan un mensaje de error?

Pseudoroot

creo que tambien se podria hacer, con una especie de dll hook
www.g e d z a c.com

www.espavirus.com/foro

Krnl64

Si restringes el uso de una clase,  al abrirse el proceso ve que la clase no esta permitida y se cierra normal, sin dar error.

Aunque tambien se puede hacer que de error con una API.

Para ver las clases,  el programa tiene que estar en ejecución y tienes que verlas 1 programa especial.

Se llama Spy++ y monitoriza todos los elementos que hay corriendo permitiendo mandarle mensajes LPARAM y WPARAM. Esta utilidad la trae VB edicion Enterprise, (no estoy seguro que la traiga otras versiones. Yo tengo la Enter

Tambien puedes buscar las clases por internet, pero yo lo hago de la forma que te dije antes, debido a que segun la versión del Software (el programa instalado) algunas cambian de clase y porque asi, se las que necesito.

Las clases de Windows y otras aplicaciones, no se pueden modificar. Solo en el caso de inyeccion (creo) y solo se modifican en memoria y en tiempo de ejecucion.

La clase y Subclases de una aplicación, es como un identificador´"físico" que el S.O. utiliza para saber que esta ahi, aparte de gestionar los eventos, métodos, funciones, etc

Lee 1 poco del tema, y animate a hacer clases propias.

Tras conocer clases te podras meter en Herencia y Polimorfismo.

Salu2