Ago 202012
 

ScreenLogger es una herramienta para aquellos que quieran llevar un registro de lo que pasa en la PC, por ejemplo para aquellos padres que temen que sus hijos puedan estar en algo raro, para novios o novias celosos/as, o para alguna empresa que necesite llevar algún tipo de supervisión. Esta herramienta genera un archivo de video.AVI de todo lo que ocurre en pantalla resumiendo las partes más importantes, que es cuando se hace click o se presiona una tecla, gracias a esto el video final es de un tamaño reducido.
En cuanto a programación se refiere, les adjunto al final una versión simplificada sólo de los módulos del screenlogger, el primer link de descarga es la aplicación terminada.

ScreenLogger, VideoRecorder, Grabar Pantalla

Proyecto Completo

Módulos principales

Sep 142011
 

Para quienes no estén al tanto de que se trata pueden leer en Wikipedia sobre este sistema para almacenar información en una imagen, el cual es cada ves mas utilizado en diferentes productos y publicidades. hoy en día muchos celulares trae una aplicación para decodificar estas imágenes.

El modulo clase a continuación se encarga de Codificar y Decodificar QR Code,  utilizando dos apis de dos servidores web qrserver.com para codificar y zxing.org para decodificar, si bien esto podría hacerse sin estas dependencias me parece que desarrollar dicha tarea no es nada sensilla (teniendo en cuenta que la imagen no siempre estará presentada en forma vertical),  existen algunas dll para realizar este trabajo pero no encontré ninguna compatible  para VB6.

En el siguiente proyecto  encuenta la clase ClsQrCode.cls en la que encontraremos las siguientes funciones

  • GetPictureQrCode:  esta función retorna un StdPicture, el cual se seria de nuestro QR Code codificado, si no retorna ninguna imagen (Is Nothing)  entonces significa que la función fallo. A continuacion sus parametros.
    1. sText:    Requerido, Es el texto el cual queremos codificar, la clase solo se encarga de texto plano, si quieren pueden agregar los prefijos SMSTO: o TEL: etc. segun el caso, pueden ver un poco mas en goqr.me
    2. Width:   Requerido, Ancho de la imagen (Minimo 10 Px, Maximo 1000 Px)
    3. Height:  Requerido, Alto de la imagen (Minimo 10 Px, Maximo 1000 Px)
    4. Encoding:   Opcional, «UTF-8» o «ISO-8859-1»
    5. ErrCorrectionLevel:   Opcional,  «L», «M», «Q», «H»
    6. ForeColor: Opcional, Color de los cuadritos
    7. BackColor:   Opcional, Color de fondo
    8. Margin:   Opcional, Margen (máximo 50, expresado en módulos)
  • DecodeFromStream: decodifica mediante el array de bits de una imagen. (Dos parámetros el primero el array de bits, y el segundo debe pasarse una variable de tipo string como retorno), si la función tiene éxito devuelve True
  • DecodeFromPicture: decodifica un StdPicture. (Dos parámetros el primero el StdPicture, y el segundo debe pasarse una variable de tipo string como retorno), si la función  tiene éxito devuelve True
  • DecodeFromFile: decodifica desde un archivo de imagen. (Dos parámetros el primero el path de la imagen, y el segundo debe pasarse una variable de tipo string como retorno), si la función tiene éxito devuelve True
  • DecodeFromUrl: decodifica desde la url de una imagen. (Dos parámetros el primero el la URL de la imagen, y el segundo debe pasarse una variable de tipo string como retorno), si la función tiene éxito devuelve True
QR CODE

Ago 092011
 

Aprovechando la creación del ucMDITaskBar cree este control de usuario para poner un TabControl a un formulario MDI, el cual no requirió muchos cambios, aproveche el ucTabStrip de Raul338, su uso es muy sencillo sólo basta con poner un control sobre el formulario MDI y el control se encarga del resto.
Si bien hay algunos códigos similares dando vuelta por la web, este tiene algunas opciones extra, como por ejemplo poner la cruz de cerrar en cada ficha, invocar el SysMenu de cada formulario con el click derecho en la ficha, además, no requiere código extra.

Detalles de sus propiedades y funciones:

  • Initialize: Esta función es encaso que si dentro del evento Load del formulario MDI se carga algún formulario es necesaria llamarla para inicializar el control antes que el formulario, de lo contrario lo este lo ara automáticamente, su único parámetro es el hwnd del formulario MDI.
  • IconSize: Devuelve o establece el tamaño de icono que queramos utilizar.
  • MinTabWidth: Devuelve o establece el tamaño mínimo para cada ficha.
  • MaxLen: Devuelve o establece el largo del texto que se quiera mostrar, supongamos que un formulario tienen un Caption muy extenso la ficha seria muy larga, pues con esta propiedad podemos hacer que se limite a cierta cantidad de caracteres y así establecer un ancho máximo para las fichas, si dejamos 0 mostrara el Caption completo.
  • CloseButtonVisible: Devuelve o establece si el control mostrara la cruz de cerrar en cada ficha
  • CloseButtonStyle: Devuelve o establece el estilo del botón cerrar de la ficha, cuenta con dos estilos
  • MultiLine: Devuelve o establece si el control mostrara las fichas en una sola fila o en varias.
  • ShowMenu: Devuelve o establece si el usuario puede invocar el SysMenu al hacer click derecho en cada ficha
  • Enabled: Devuelve o establece si el control está o no habilitado
  • Font: Devuelve o establece la Fuente para el TabControl.
  • hwndTabControl: Devuelve  el Handle del SysTabControl32
  • hwndUserControl: Devuelve  el Handle del control de usuario
  • hwndMDIClient: Devuelve el Handle MDIClient del formulario MDI

TabMDI.png

Ago 032011
 

Control de usuario para crear una barra de tareas dentro de un formulario MDI, actúa prácticamente igual que la barra de tareas del explorador de Windows, la idea es darle al usuario una mejor forma de moverse dentro del formulario MDI, sobretodo cuando hay muchas ventanas abiertas. su uso es muy sencillo solo vasta con agregar un solo control el MDI y este se encarga de hacer todo el trabajo.
En el ejemplo de descarga como complemento  agregue dos módulos, uno de ellos es la clase ClsButtonNC para crear un efecto muy parecido al botón inicio de Windows, y el otro modulo es MdiFullScreen (que se encuentra en la sección de Tips) este ultimo pone en pantalla completa al formulario MDI cuando esta maximizado.
El control ucMDItaskBar internamente crea un ToolBar el cual cuenta con una propiedad para ponerle un Skin, también tiene soporte para caption Unicode e iconos de 32 bits si es que algunos de los formularios dentro del MDI tiene estos elementos.
Tal como como Windows si no se quiere mostrar el formulario en la barra, solo vasta con que pongan al formulario hijo en tiempo de edición ShowInTaskBar = False.
El ucMDItaskBar utiliza Subclasificación y es SafeMode (Modo seguro) , pero tengan en cuenta que la clase ClsButtonNC no, asi que No presionar el Stop del IDE de VB6.

Detalles de sus propiedades y funciones:

  • Initialize: Esta función es encaso que si dentro del evento Load del formulario MDI se carga algún formulario es necesaria llamarla para inicializar el control antes que el formulario, de lo contrario lo este lo hará automáticamente, su único parámetro es el hwnd del formulario MDI.
  • BackColor: En caso que no se utilice un Skin este utiliza el color del fondo asignado.
  • ButtonsWidth: Devuelve o establece el ancho de los botones de la barra.
  • ButtonsHeight: Devuelve o establece el alto de los botones de la barra.
  • IconSize: Devuelve o establece el tamaño de icono que queramos utilizar.
  • SetIndent: Devuelve o establece la ubicación izquierda donde comienzan a mostrarse los botones, esto es por si queremos utilizar un botón Inicio, tener en cuenta que agregar un control sobre la barra no dará buenos resultados, lo aconsejable es utilizar la clase ClsButtonNC, o utilizar un PictureBox como contenedor para poner el botón y al lado la barra.
  • Align: Devuelve o establece la ubicación por donde se moverá la barra.(si bien soporta todas las posiciones lo aconsejable es vbAlignBottom)
  • SkinPicture: Devuelve o establece una imagen que se utilizara como decoración de la barra (el formato utilizado pueden verlo dentro del ejemplo).
  • MoveMode: Indica a la clase en qué sentido debe mover el botón cuando la ventana padre se mueva o cambie de tamaño.
  • Enabled: Devuelve o establece si el control está o no habilitado
  • Font: Devuelve o establece la Fuente para la barra.
  • hwndToolbar: Devuelve  el Handle del ToolbarWindow32 de la barra
  • hwndUserControl: Devuelve  el Handle del control de usuario
  • hwndMDIClient: Devuelve el Handle MDIClient del formulario MDI

ucMDItaskbar1
ucMDItaskbar1

Jul 292011
 

Módulo clase para agregar un botón en las partes no cliente del formulario (bordes), actualmente con la llegada de Windows Seven son varias las aplicaciones que utilizan este sistema. Bien, esta clase sólo intenta crear un efecto parecido, y digo intenta ya que es otro método el que utilizan, lo que hace es crear una ventana en la que aplica el API UpdateLayeredWindow, la cual transforma un mapa de bits en una máscara para la ventana, la cual tiene soporte Alpha. Las aplicaciones por ejemplo Firefox, donde hoy en día se puede ver un botón naranja sobre el área no cliente utilizan otro método (DwmExtendFrameIntoClientArea, DwmEnableBlurBehindWindow) que es el de repintar el marco de la ventana empleando la nueva Guid de Windows Seven, esta clase también se puede utilizar bajo Windows XP, para ser más exacto esta clase hace lo mismo que se vé en el Botón Inicio de Windows 7.

Detalles de sus propiedades y funciones:

  • CreateButton: Inicializa el botón, el primer parámetro debe ser el hwnd de la ventana padre, el segundo parámetro es opcional para el ToolTipText.
  • LoadImageFromFile: Lee una imagen desde archivo.
  • LoadImageFromRes: Lee una imagen desde el archivo de recurso de la aplicación.
  • LoadImageFromStream: Lee una imagen desde un array de bits.
  • Left: Devuelve o establece la ubicación izquierda del botón con respecto a su ventana padre.
  • Top: Devuelve o establece la ubicación superior del botón con respecto a su ventana padre.
  • Right: Devuelve o establece la ubicación derecha del botón con respecto a su ventana padre.
  • Bottom: Devuelve o establece la ubicación inferior del botón con respecto a su ventana padre.
  • MoveMode: Indica a la clase en qué sentido debe mover el botón cuando la ventana padre se mueva o cambie de tamaño.
  • Enabled: Devuelve o establece si el botón está o no habilitado
  • Alpha: Transparencia del botón rango de 0 a 255.
  • ToolTipText: Devuelve o establece el texto mostrado cuando el mouse se sitúa sobre el control.
  • ImageWidth: Devuelve  el ancho de la imagen cargada.
  • ImageHeight: Devuelve el alto de la imagen cargada.
  • hwnd: Devuelve el Handle del botón.
  • ButtonWidth: Devuelve el ancho del botón.
  • ButtonHeight: Devuelve el alto del botón.

Vale aclarar que el botón no tiene Caption ya que es una tira de imágenes (la imagen debe ser siempre una tira vertical) -ver el formato en el zip del ejemplo-, el orden utilizado de los estados es Normal, Hot, Presionado y Deshabilitado. El formato de la imagen es conveniente que sea .PNG para la transparencia.

Nota: La clase subclasifica las ventanas y no utilicé el método modo seguro (SafeMode) sólo para que no sea muy grande el módulo, así que ojo No presionar el Stop del IDE de VB6. Ante cualquier error seguramente se les cerrará todo el proyecto y en el peor de los casos se les reiniciara Windows. Es recomendable comentar la línea de inicialización del botón (CreateButton) hasta que se compile el proyecto.

Boton No Cliente

En el ejemplo hice una validación que si la versión de Windows es Vista o Seven que quite el icono y el Caption de la ventana utilizando el api SetWindowThemeAttribute, ahora si es Windows XP van a ver que no queda muy bien ya que debajo del botón se vé el icono y el caption, quizás estés pensando en poner un icono transparente y remover el Caption pero esto hará que no se vea en la barra de tareas.

Boton No Cliente

Jul 212011
 

Este es un ejemplo de como crear una venta similar a las que aparece en Windows  Seven sobre los iconos del SysTray, en el ejemplo van a encontrar dos clases, una ClsPopUpTray.cls es la encargada de crear este tipo de ventanas, la otra ClsSysTray.cls es una clase para agregar iconos al SysTray (esta ultima esta basada en la clase de Cobein, con algunas modificaciones), También encontraran dos User Controls, uno de ellos es ucCommandLink.ctl (creado por Raul338), el cual crea un botón de tipo link (solo en Vista y Seven), y el segundo ucLabelItem.ctl es uno para crear un Label con algunas opciones que acompañan la guid del ejemplo.
Quiero aclarar que este ejemplo se lucirá bien si se ejecuta en Windows Seven con el Aero activado, de lo contrario puede que no se vea correctamente algunos controles.

SysTray PopUp
SysTray PopUp

Jul 102011
 

Módulo clase para agregar imágenes en controles OptionButton, CheckBox, CommandButton y Frame cuando se encuentran los Temas de Windows corriendo en la aplicación (Manifest), esta clase la había creado hace un tiempo atrás, la cual está publicada en Recursos Visual Basic donde la clase podía poner varios iconos para cada estado del botón (MousOver, MouseDown y deshabilitado). En esta versión se quitó dicha propiedad ya que no lo considero muy útil, también eliminé otra propiedad la cual si no estaban los Themes habilitados ponía una imagen de todas formas, una de las ventajas de esta versión es que no se necesita una clase para cada control, ya que con una podemos cubrir todos los controles del formulario o la aplicación, otra es que se puede poner cualquier tipo de imagen  (PNG, JPG, BMP e ICO) y la lectura de las imágenes en varias formas.

Detalle de sus funciones:

  • SetImageFromHandle:  Agrega la imágen desde su handle (Bitmap o Icono).
  • SetGdiPlusImagen: Agrega la imágen desde un hBitmap de GDI+.
  • LoadImageFromFile: Carga una imágen desde un archivo.
  • LoadImageFromRes: Carga una imágen desde el archivo de recurso.
  • LoadImageFromStream: Carga una imágen desde un array de bits.
  • SetMargins: Indica los márgenes de la imágen con respecto al control (Left, Top, Right, Bottom).
  • Align: Propiedad para poner u obtener la alineación de la imágen con respecto al control (Icon_Left, Icon_Right, Icon_Top, Icon_Bottom, Icon_Bottom, Icon_Center).
  • RemoveImage: Remueve la imágen del control.

La fórmula principal de dicho módulo es asociar un ImageList (API) con un ícono al control utilizando SendMessage con el mensaje BCM_SETIMAGELIST y la estructuraBUTTON_IMAGELIST el resto del código solo trata de formar las imágenes en objetos Iconos.

Nota: Cuando prueben el proyecto si están en el IDE seguramente no van a ver ningún icono, ya que no funciona si no está compilado (excepto que tengan el VB6 con Manifest) así que sólo van a ver su funcionamiento cuando corran el ejecutable (recalco para los que no están al tanto, la clase sólo funciona si se utilizan los temas de Windows, para más información ver este link).

Iconos en botones

Jul 032011
 

RSS Reader es una aplicación que nos permite leer nuestros RSS directamente en la bandeja del sistema, coloca un icono en SysTray de Windows el cual al hacer un clic no desplegara un menú con todos los feeds que previamente hallamos cargado, para la lectura de cada ítems se utilizo un Web Browser el cual muestra toda la información, imágenes y videos.
al hacer clic en un video abrirá una ventana en la cual podremos visualizar a este. para ver la fuente completa de cada titulo solo bastara con hacer clic en el ítem del menú o en mismo titulo.
Dentro del menú encontraran la un ítem «Configuración» el cual nos abrirá una ventana en la que podremos agregar nuevas entradas.
Para detener la aplicación, si están en el IDE de Visual Basic hagan clic en el menú «Salir» y no desde el «Stop» de VB ya que esto podría llegar reiniciar su PC.

Rss Reader
Feed Reader
Atom Reader

Abr 242011
 

Esta es una aplicación para utilizar con Facebook, la cual nos permite subir imágenes a dicho sitio de una forma muy fácil. Sólo basta con ejecutarlo por primera vez y éste creará un acceso directo en un menú contextual, donde al pararnos sobre una imágen de nuestro ordenador, hacer click derecho y nos dará la opción de subir dicha/s foto/s a nuestra cuenta de Facebook.
A lo que programación se refiere son dos proyectos uno de ellos maneja toda la interfaz grafica, y el otro se encarga de las peticiones HTTP, porque hacer esto asi?, en primera medida muchas de las peticiones utiliza SSL (Secure Sockets Layer -Protocolo de Capa de Conexión Segura) lo cual hacerlo directamente con las  Apis sokets  lo veo muy complicado para mi, entonces opte por utilizar las Apis de Inet.dll, las cuales no trabajan de forma asíncronas, y esto produce que se cuelgue el programa por cada petición, entonces realice dos proyectos los cuales se comunican con una conexión tipo DDE. entonces cada vez que el proyecto principal requiera hacer una petición HTTP ejecuta el segundo proyecto con una línea de comando, este procesa la información y se lo comunica a la aplicación principal.
Vale aclarar que no utilice las Apis de Facebook por algunas cuestiones, en realidad lo que hace es enviar las peticiones con métodos POST a los formularios php de Facebook, se que esto en un tiempo pueda dejar de ser efectivo pero mientras tanto a disfrutar de la aplicación.
Trate de ver todos los detalles, pero ustedes saben bien que que los bugs nunca se acaban. mi idea es que todos aquellos programadores que se animen puedan aportar su idea en como mejorarlo o comunicar algún bugs. por lo pronto el programa ya tiene su propia pagina en Facebook donde espero que todos se unan e inviten as sus contactos.
pongo el código de fuente pero espero que nadie se robe la idea para utilizarlo con uso propio.

Facebook Photo Uploader
Facebook Photo Uploader
Facebook Photo Uploader
Facebook Photo Uploader

Aquí el link en Facebook:

Descargar aplicación.

Descargar código de fuente.

Abr 202011
 

Esta es una aplicación para crear tiras de imágenes (casi lo contrario de esto), las cuales son utilizadas frecuentemente en los ImageList (Creados con Apis, ya que los OCX de los Common Controls no tienen soporte para dichas imágenes.) en fin suele ser muy útil a la hora de empaquetar los iconos en nuestro proyectos ya que con un solo bitmap podremos poner todos los iconos que utilizaremos lo cual es mas como y mas liviano que incluir icono por icono en un archivo de recursos.
un ejemplo claro pueden verlo en las imágenes a continuación

Tira_Img_02
Tira_Img0_01

Si bien tiene soporte para todas las resoluciones, no funciona correctamente con las imágenes que utilicen paletas de colores porque no la respeta correctamente, esto es algo que me quedo pendiente ya que fue una mala decisión de como realizarlo desde un principio y no tenia ganas de dar marcha atrás. el proyecto tuvo muchos cambios ya que parece algo fácil pero me tope con muchas trabas y al final opte por incluir la clase c32bppDIB de LaVolpe.
Realmente estoy muy inconforme con el resultado final pero ya me tenia algo cansado y opte por publicarlo como esta.

Image Strip Creator
Image Strip Creator
Image Strip Creator

Ene 212011
 

Esta es la Tercera parte del proyecto de administración remota, se han añadido capturador de Audio remoto y Pantalla remota.
Para esta al tanto de que se trata este proyecto leer este topic.

Algunos detalles:
-El audio en una red LAN es bastante fluido, pero atreves de internet tiene unas pequeñas pausas, no tuve mucha oportunidad de ir ajustándolo ya que necesito molestar a alguien más para poder ir probándolo. (Nota: si lo prueban en su misma PC la experiencia es muy mala.)
-El escritorio remoto funciona bastante bien, podría decirse que mucho mejor que la versión anterior, los inconvenientes que encontré fue con el  presionado de algunas teclas que no funcionan por ejemplo el @ y el icono cursor a veces puede no cambiar bien  (lo cual tengo en mente cambiar algunas cosas más adelante.)

Remote Audio Capture
Remote Screen Capture

Dic 092010
 

Esta es la segunda parte del proyecto (aún sin nombre) de administración remota, en esta segunda parte se han añadido mas herramientas entre ellas Visor de Procesos y Ventanas, Visor de Webcam, Registro, Consola y Keylogger, el proyecto sigue en etapa de desarrollo por lo que hay muchos cabos sueltos.
Para esta al tanto de que se trata este proyecto leer este topic.

Como siempre me ver sus comentarios, que debería tener, que esta mal, que debería cambiar , o que no funciona.

KeyLogger
Procesos
Tareas
Registro
WebCam
Consola