Título: ¿Es posible cambiar el ClassName de un Form en VB6 o VB.NET2010? Publicado por: okik en 10 Febrero 2015, 20:09 pm Hola
LLevo infinidad de tiempo intentando encontrar la manera de cambiar el nombre de clase un formulario creado en VB6 o VB.NET. Pero no he encontrado la forma. ClassName en VB6: ThunderRT6FormDC fuera del entorno de programación ThunderFormDC dentro del entorno de programación ClassName en VB.NET WindowsForms10.Window.8.app... Sé que es posible establecer tu propio ClassName si creas el form desde cero mediante CreateWindowEx. Pero los usuarios de VB estamos mal acostumbrados y eso de tener que crear las cosas de forma "imaginaria" y que solo sean visibles cuando se ejecuten.... es un rollo. No hay ganas. Lo curioso es que jamás me he encontrado ninguna aplicación, ni grande, ni pequeña, que tubiese el nombre de clase (ClassName) como ThunderRT6FormDC. Luego, ¿Nadie que se dedique profesionalmente ha utilizado VB para crear sus apliaciones? o bien, ¿sí que es posible cambiarlo.? A ver si algún gurú de la programación me lo sabe explicar. Título: Re: ¿Es posible cambiar el ClassName de un Form en VB6 o VB.NET2010? Publicado por: Miseryk en 11 Febrero 2015, 19:02 pm Parece ser un tema complicado, no ví resultados en internet, pero hay que tener algo en cuenta, primero se registra una clase con "RegisterClassEx"
Código
Así que si la querés cambiar tenés que ir pensando en crear una a donde apuntar, ya que las clases son importantes porque los botones, textboxes son de tales características debido a su clase. Luego podrías ver que hace internamente CreateWindow o CreateWindowEx, debe apuntar a un string o un puntero de la estructura ésa. Ahora estoy un tanto ocupado haciendo funcionar "ZwQueryVirtualMemory", pero luego me pongo a debuggear CreateWindow y tratar de cambiar la clase, te conviene hacerlo en C++ y cuando lo logres lo pasás a VB6. Título: Re: ¿Es posible cambiar el ClassName de un Form en VB6 o VB.NET2010? Publicado por: okik en 19 Marzo 2015, 11:38 am Lo he intentado #Miseryk# pero pasa que cuando se crea un form, no con el create windows, sino con el que proporciona VB6 por defecto, entonces éste ignora cualquier referencia al ClassName o cualquier intento de cambio, porque este form depende directamente del archivo msvbvm60.dll que se encuentra \system32.
El fomoso nombre de clase ThunderRT6FormDC que se establece en el viejo VB6, está establecido en el archivo msvbvm60.dll. De modo que si se modifica el archivo con un editor hexadecimal, por ejemplo con Hex Editor al ejecutar cualquier apliación compilada con VB6, ésta tendrá el nombre de clase que se haya establecido en este archivo. No se puede modificar el nombre ThunderRT6FormDC en una sola línea, si no que se tiene que hacer por partes: ThunderRT6 en: 73180 36 00 00 00 00 00 00 00 54 68 75 6e 64 65 72 52 73190 54 36 00 55 8b ec 56 8b 75 08 8b 46 28 f6 40 2a Form en: 00fb10 46 6f 72 6d 00 00 00 00 4c 69 6e 65 00 00 00 DC en: 28a90 DC 00 00 44 46 72 61 6d 65 00 00 00 00 00 Cuando la aplicación se ejecute en otro SO, con el archivo original msvbvm60.dll, entonces el nombre de clase de nuevo será ThunderRT6FormDC. Si el archivo ya modificado, está en la mísma carpeta del EXE creado con VB6 entonces, el nombre de clase será el establecido en el archivo que hemos modificado, independiéntemente que en \system32 esté el original. Porque el EXE recurre al archivo msvbvm60.dll inmediato del directorio y no lo busca en \system32. Título: Re: ¿Es posible cambiar el ClassName de un Form en VB6 o VB.NET2010? Publicado por: Miseryk en 21 Marzo 2015, 02:20 am Lo he intentado #Miseryk# pero pasa que cuando se crea un form, no con el create windows, sino con el que proporciona VB6 por defecto, entonces éste ignora cualquier referencia al ClassName o cualquier intento de cambio, porque este form depende directamente del archivo msvbvm60.dll que se encuentra \system32. El fomoso nombre de clase ThunderRT6FormDC que se establece en el viejo VB6, está establecido en el archivo msvbvm60.dll. De modo que si se modifica el archivo con un editor hexadecimal, por ejemplo con Hex Editor al ejecutar cualquier apliación compilada con VB6, ésta tendrá el nombre de clase que se haya establecido en este archivo. No se puede modificar el nombre ThunderRT6FormDC en una sola línea, si no que se tiene que hacer por partes: ThunderRT6 en: 73180 36 00 00 00 00 00 00 00 54 68 75 6e 64 65 72 52 73190 54 36 00 55 8b ec 56 8b 75 08 8b 46 28 f6 40 2a Form en: 00fb10 46 6f 72 6d 00 00 00 00 4c 69 6e 65 00 00 00 DC en: 28a90 DC 00 00 44 46 72 61 6d 65 00 00 00 00 00 Cuando la aplicación se ejecute en otro SO, con el archivo original msvbvm60.dll, entonces el nombre de clase de nuevo será ThunderRT6FormDC. Si el archivo ya modificado, está en la mísma carpeta del EXE creado con VB6 entonces, el nombre de clase será el establecido en el archivo que hemos modificado, independiéntemente que en \system32 esté el original. Porque el EXE recurre al archivo msvbvm60.dll inmediato del directorio y no lo busca en \system32. Yo empezaría con un breakpoint en CreateWindow/CreateWindowEx y RegisterClass/RegisterClassEx, sí o sí tiene que caer por algunas de esas funciones. Título: Re: ¿Es posible cambiar el ClassName de un Form en VB6 o VB.NET2010? Publicado por: Miseryk en 21 Marzo 2015, 02:47 am Lo ví así nomás, no me metí a debuguear mucho, el fin de semana me fijo mejor:
Código
Título: Re: ¿Es posible cambiar el ClassName de un Form en VB6 o VB.NET2010? Publicado por: Miseryk en 21 Marzo 2015, 15:06 pm (http://fotos.subefotos.com/deca3a3578ee3e18278312ec6496686do.png)
Título: Re: ¿Es posible cambiar el ClassName de un Form en VB6 o VB.NET2010? Publicado por: okik en 24 Marzo 2015, 20:19 pm Lo que pasa es que CreateWindow/CreateWindowEx y RegisterClass/RegisterClassEx crean un formulario desde 0 y no tiene dependencia con msvbvm60.dll y en cualquier caso con User32.dll, que siempre está disponible en windows.
Por ahora, voy ha dejar el tema y la programación durante un tiempo para centrarme en otras cosas. Pero gracias de todos modos. :D |