admin

May 262021
 

Dos juegos realizados en Excel. El primero es juego que lo vi realizado con tablitas de madera y me dio ganas de hacerlo en Excel, la verdad si bien me dio trabajo programarlo es más difícil lograr el objetivo del juego, en YouTube hay un par de tutoriales pero eso seria como ir derecho a la trampa, así que les dejo este desafío para pasar el rato (yo no logré resolverlo)

El objetivo del juego es bajar la ficha naranja en la parte inferior tal como muestra el cuadro de solución, las piezas se mueven con el mouse.

TRABADO2.png

El segundo lo copie de un juego del móvil, no esta completo, tiene solo algunos niveles, pero fue mas que nada para sacarme las ganas de hacerlo.

En este el objetivo es armar el bloque superior con las partes inferiores, un rompecabezas por así decirlo.

Triangle.png
May 082021
 

Otro proyecto del baúl de los recuerdos, con muchas actualizaciones. Se trata de un módulo para obtener las contraseñas guardadas por los navegadores web, si bien hay un rejunte de código de diferentes autores el que más puedo citar es «Cobein» quien fue el creador de la base de este módulo. Ahora bien esto fue mucho tiempo atrás y muchos métodos de encriptación han cambiado desde entonces, por lo que hubo que actualizar gran parte para que siga funcionando. Tiene soporte para los 5 navegadores mas utilizados en el mercado:

  • Google Crome
  • Microsoft Edge
  • Firefox
  • Opera
  • Internet Explorer

Además también puede obtener el historial de navegación, ahora si preguntan que utilidad tiene esto, pues puede ser útil para exportar contraseñas a un pendrive, para alguna auditoria de navegación mediante su historial (naa mentira es para hacking), yo lo tomo como un juego a encontrar el como descifrar el acertijo.

En cuanto a lo técnico, utiliza sqlite3.dll. Todos menos Internet Explorer almacenan sus contraseñas en esas bases de datos, Firefox con el paso de los tiempos migró a JSON, un dato curioso que al menos a mi me sorprendió tanto Chrome, Ms Edge y Opera utilizan Blink por lo que me vale decir son los tres iguales, todos almacenan sus contraseñas de la misma forma y con la misma encriptación, misma estructura, mismo historial, sólo cambian las ubicaciones y nombres de las BD pero es la misma metodología.

La mayor bronca que me quedó es que no pude encontrar la forma posta de descifrar cómo lo hace Firefox realmente, el método que se utilizó en este caso es haciendo una llamada a una dll del mismo FF pero el problema es que en sistemas de x64 bits no funciona debido a que nuestro querido VB6 es de x32, pero bien hay mucha información de cómo descifrar mediante los métodos de encriptación que utiliza, sólo que ya no me da el cuero para tanto, si les interesa aquí está toda la información.

Para Internet Explorer puse un módulo aparte y el módulo del historial ni lo incluí en el proyecto ya que hoy en día el historial se borra ni bien se cierran IE y bien como ya es de conocimiento público este ha pasado a mejor vida.

Agradecimiento especial a wqweto

Password Revealer1.png Password Revealer2.png
Abr 242021
 

En este caso se trata de una aplicación que hace tiempo venía trabajando y quedó en el baúl de los proyectos olvidados. Es un descargador de videos de varias plataformas como:

  • YouTube
  • Facebook
  • Instagram
  • Dailymotion
  • Vimeo
  • Tiktok (por el momento no funciona)

Además de descargar el video, también podemos convertirlo a audio (.MP3) donde según el titulo del video, si este es una canción busca automáticamente las etiquetas Titulo, Autor, etc etc y las inserta dentro del mp3 como así también su imagen de portada, sólo que ésta es la que vemos en la previa del video.

En el caso de los videos también se pueden descargar o insertar dentro del video los subtítulos, si es que los tiene. La aplicación está pensada especialmente para descargar «listas de reproducción» de YouTube, donde podemos descargar muchos videos simultáneos.

Su funcionamiento es sencillo, sólo tienen que copiar el link del video, puede ser la url que está en la barra de navegación o en alguna parte del menú según la plataforma puede decir «copiar link», «compartir» etc etc. y luego lo pegan en la aplicación.

En cuanto a la programación lo voy a dejar con muchas cosas pendientes, por el momento perdí interés en este proyecto, aclaro que es muy muy complicado de entender o depurar ya que al ser asíncrono es una telaraña que va y viene. Si bien traté de utilizar Apis documentadas y Apis indocumentadas, en algunos casos YouTube especialmente en lo que es música, codifica sus link de video y no logré decodificar este algoritmo, por lo que recurrí al uso del control webbrowser para que haga el trabajo y mediante JavaScript obtener este link decodificado. Ahora bien como el webbrowser tiene algunos cuelgues y no quería que interfiriera con el UI de la aplicación después de varios intentos lo mejor que conseguí es ponerlo en otro ejecutable «YTBrowser.exe» y manejarlo como una aplicación de consola para que no ralentice la app principal, además en el caso de Instagram es necesario loguearse para poder obtener los link así que se muestra el webbrowser con la página de login de Instagram. También se utilizó otra aplicación de consola «FFMPEG» para la conversión de mp4 a mp3 e inserción de subtítulos a los videos.

No sé cuánto pueda durar funcionando esta app sin actualizaciones ya que todas las plataformas cambian constantemente, como ser el caso de TikTok que mientras lo programaba ya había cambiado sus link y paso a codificarlos, pero esta vez de una forma mucho más compleja que por momento no supe cómo resolver.

Así que espero que la disfruten mientras dura.

VideoDownloader.png VideoDownloader2.png
Mar 222021
 

Este es el reproductor musical que había mencionando en el post anterior
donde se mostraba cómo implementar el diseño Neomorfismo (Neumorphism Design) en vb6, en este proyecto se aplicó un ejemplo funcional del mismo. El diseño en si esta copiado de esta imágen.

Para el motor de reproducción se utilizó bass.dll y uno de sus complementos bass_fx.dll muy recomendable echarle una mirada a toda esta suite de librerías que cuentan con ejemplos para vb6.

Si bien al principio iba a hacer algo sencillo después se me dió por hacer algo bien completo donde se implementaron algunas características como: leer desde una lista de reproducción, líneas de comando, arrastrar y soltar, editor de etiquetas, ecualizador, display animado, vista previa en la barra de tareas, manejo con teclado y bueno seguramente muchas muchas cosas me estarán faltando, lo cual algunas podré agregar más adelante si me las sugieren.

En cuanto a la lista de reproducción no recomiendo cargar más de 300 canciones ya que la forma en que armé el control de lista es muy limitado porque utiliza controles en vez de métodos gráficos, pero bien creo que con 300 canciones es un número respetable.

La aplicación es 100% portable con soporte a Unicode

neumoplayer1.png neumoplayer2.png neumoplayer3.png neumoplayer4.png
Descargar Proyecto
Descargar Binario + un Mp3 de mi banda «Viento Rojo»
Mar 182021
 

En este caso se trata por un lado de un Módulo clase y por otro un Usercontrol para crear una interfaz de usuario moderna llamada Neumorphism o Neomorfismo, la cual comenzó a ponerse de moda a partir del 2020, si bien está pensada para aplicaciones móviles o webs no veo motivo para no implementarlo en nuestro querido vb6, al menos en aplicaciones pequeñas para no sobrecargar mucho la memoria y ralentizar nuestra app. El motor de todo esta basado en GDI+.

Con el módulo clase hay un ejemplo donde podemos jugar con las propiedades de la clase y otro formularios con algunos ejemplos graficados.
Además este permite dibujar un Path de GDI+ con el cual se utilizó un módulo extra, donde se puede crear distintas formas (Shapes) y se les puede aplicar el estilo, aprovecho para agradecer a Eduardo por tomar parte de las rutinas de su ShapeEx.

Con el Usercontrol hay tres ejemplos aplicados. No voy a detallar todas las propiedades, es cuestión de meter mano y jugar un poco, son las mismas del módulo. Con los ejemplos esta acompañando el usercontrol «LabelPlus» que es para agregar texto e iconos a las formas, (no quise volver a programar todo esto por eso utilicé dos usercontrols).

Ya más adelante voy a subir un reproductor de música en el que estoy trabajando donde puede verse todo esto aplicado.

Por último quiero aclarar que todo esto funciona más rápido cuando está compilado..

Neumorphism1.png Neumorphism2.png Neumorphism3.png Neumorphism4.png Neumorphism5.png
Mar 012021
 

Hola en esta ocasión un poco más de lo mismo ya en el blog hay 3 artículos más referidos a menús, pero bien, esta clase se trata de armar un menú popup con apis de una forma más sencilla y con varias propiedades que vb6 no contiene, algunas de ellas son: ItemBitmap, ItemRadioCheck, ItemDefault, ItemHilite, ítems en columna (Break).

Como plus hay un módulo que sirve para leer imágenes, con un tamaño específico, esto esta pensado más que nada para soporte del DPI.

Dentro del módulo está la función llamada LoadPictureEx con la que podemos pasarle como primer parámetro:

  • Un Array de bits de la imagen
  • El path de la imagen
  • Una Url web de la imagen
  • Una url con la imagen codificada en ella «data:image/png;base64,iVBORw…»
  • Un objeto Stream (devuelto por algunas librerías de windows)
  • Un hBitmap
  • un hIcon

El segundo y tercer parámetro es el alto y ancho de la imagen. El tercero boolean si queremos que se ajuste a ese ancho o que sea proporcional. El cuarto parámetro el formato de salida vbPicTypeBitmap o vbPicTypeIcon. El quinto parámetro es un color, para esas imágenes tipo vectoriales de un solo color, con esta función podemos pintarlas a ese color (aclaro no tiene soporte para SVG). El sexto parámetro BackColor, sería por si es un png y lo queremos mostrar en un control imagen, elegimos su color de fondo.

la función retorna un iPicture o StdPicture con un Bitmap o Icono con una imagen de 32Bits de profundidad, la cual sirve para pasar a los common controls. y el menú por supuesto. también se pude utilizar con el icono del formulario con SendMenssage, el SysTray etc etc etc.

ClsApiMenu.png
Dic 192020
 

Este proyecto me lo compartió el colega J. Elihu quien fue que lo trabajo, así que les dejo como descripción su propio Readme.txt para que entiendan mejor. Se los recomiendo!

CONTENIDO:

  1. ¿Que es vbSqlite?
  2. Caracteristicas
  3. ¿Como usar?
  4. Licencia

  1. ¿Qué es vbSqlite3?

SQlite3 + VB6: vbSqlite3 es un envoltorio (ligero,entendible) que permite
integrar el motor de base de datos de SQlite con las aplicaciones de VB6
Todo estos sin generar dependencias (ODBC, ADO y DLL’s activex) y usando
las versiones actuales del MDB de SQlite3.

REQUERIMIENTOS

- Sqlite3.dll   -> MDB de Sqlite.
- cLib      -> Conectar Sqlite3.dll + VB6.
- cSqlite   -> Conexión a la base de datos.
- cSqliteCursor -> Manejador de consultas a la base de datos.

CREDITOS

- Cobein   (mSqlite.bas)
- Cocus    (cSQLiteConnection.cls)
- Cocus    (cSQLiteRecordset.cls)

  1. Caracteristicas

vbSqlite3 implementa todas las funciones requeridas para una conexión con
el motor de base de datos de SQlite, adicionalmente implementa rutinas,
propiedades y funciones que facilitan su uso y claro entendimiento.
El envoltorio permite:

- Ejecutar commandos SQL de SQlite.
- Adjuntar varias bases de datos a una conexión de SQlite.
- Copia de seguridad de la 'db' (backup).
- Eliminar los espacios en blanco de la 'db' (vacuum)
- Configurar el modo WAL de la 'db'
- Cambiar la codificación de la 'db'
- Activar/Desactivar la restrición de claves foraneas.
- Cambiar el modo de sincronización de la 'db'.
- Obtener el código y mensaje de error.
- Insertar/Actualizar datos mediante un objeto de consulta
  (cSqliteCursor) - (Sqlite_bind_*).
- Reestablecer los objetos de consulta (reset).
- Obtener los campos BLOB de una consulta.
- Adjuntar datos a una declaracion preparada (Sqlite_bind_*).
- Obtener la ID del ultmio registro insertado.
- Obtener la cantidad de registros afectados por una consulta.
- Ejecutar transacciones desde una coleccion de sentencias SQL.
- Obtener y establecer la version de usuario(UserVersion).
- Crear multiples instancias de conexión (cSqlite).
- Cargar la libreria de SQlite desde una ruta personalizada.

Las actualizaciones posteriores del envoltorio pueden incluir nuevas
características y funciones.


  1. ¿Como usar?

Se incluye la demo en el proyecto como guia de incio rápido para el uso del
envoltorio.

1 - Incluya Sqlite3.dll en la carpeta de su proyecto, o en la carpeta
    System32, o cargue la dll desde una ruta personalizada.
2 - Cree una nueva instancia de cSqlite y establezca la conexión.
3 - Llame a cSqlite.Execute para ejecutar sentencias SQL.
4 - Llame a cSqlite.Query para instanciar un nuevo objeto de consulta.
5 - Para interactuar con el objeto de consulta, segun el caso, llame a: 
    cSqliteCursor.Step
    cSqliteCursor.Value
    cSqliteCursor.BLOB
    cSqliteCursor.Bind
    cSqliteCursor.Reset
6 - Para finalizar la conexión, destruya primero la instancia del
    objeto de consulta (cSqliteCursor) y luego la instancia de la
    conexión(cSqlite).

Para Añadir/Actualizar/Remover datos mediante un objecto de declaracion
preparada debe usar la rutina: ‘cSqliteCursor.Bind’. Para mayor información
consultar la documentacion oficial: https://www.sqlite.org/docs.html


  1. Licencia

  - El envoltorio 'vbSqlite3' es gratuito.
- El envoltorio es de propiedad del autor.
- Se puede editar/cambiar/redistribuir el codigo manteniendo los
  creditos del autor.
- Se permite redistribuir el codigo fuente siempre que no se cobra
  ninguna tarifa.

J. Elihu
E-mail: elihulgst.10@gmail.com

vbsqlite3_1.jfif
vbsqlite3_2.jfif
vbsqlite3_3.jfif
Sep 012020
 

Se trata de una suite de user controls, para crear gráficos estadísticos. Son cuatro controles pero algunos poseen estilos diferentes, se podría decir que están los principales y más utilizados. Cada user control es independiente del otro, por lo que no requiere implementar toda la suite, por supuesto esto no lo hace más óptimo en reducción de código, pero es esa costumbre de no depender de nada, son muchas lineas de código y seguramente habrá más de algún bugs dando vuelta, por mi parte creo que hasta aquí llegaron mis ganas con esto, por supuesto que si alguien encuentra algún error o sugerencia se agradece informar para corregirlo.

En la descarga se encuentra un ejemplo de cada uno y un proyecto principal que abarca todos y algunos agregados para simular un Dashboard.

DashBoard.png
PieChart.png
DonutChart.png
BarChart1.png
BarChart2.png
AreaChart.png
TreeMaps.png
TreeMaps2.png

Actualizado 21/12/2021, se añadió la función image() la cual retorna una imagen del grafico para poder imprimirla, esta tiene como parámetros opcionales Ancho y Alto para poder ajustar a la hoja de impresión, junto a los ejemplos individuales hay una demostración de como imprimir.

May 042020
 

En este caso se trata de otra Api de Google con la que podes hacer gráficos interactivos de distintos tipos, cuando digo interactivos sólo me refiero a que tienen un pequeño efecto al pasar el mouse sobre los distintos trazos del gráfico. Si bien esto está pensado más para páginas web, puede sernos útil en casos puntuales, en ese punto cada quien decide si le es para suyo. El usercontrol internamente crea un WebBrowser para invocar a esta Api. Cuenta con soporte para DPI. De más está decir que requiere internet para cargar el gráfico; también aclaro que como yo lo propuse no está pensado para cambiar los datos en tiempo real, es decir se carga el gráfico con los datos y no se puede modificar sus rangos, para ello es necesario volverlo a cargar todo. Les recomiendo descargarlo y echarle un vistazo a cómo funciona.

Requerimientos:
– Internet Explorer 11
– Conosimiento del API de Google Charts

GoogleCharts1.png
GoogleCharts2.png
GoogleCharts3.png

 Posted by at 0:03
Abr 292020
 

Esta es una versión de este control el cual carecía de la barra de progreso para mostrar un porcentaje era más bien de esos que sólo giran. En esta versión se puede hacer ambas cosas, pero está más abocada a mostrar el progreso, prácticamente con un poco de ingenio se pueden lograr todos los diseños que se ven por la web de este tipo de controles tal como se muestra en la primer imágen; la segunda imágen es la página de propiedades del usercontrol, este sirve sólo para formar una paleta degradada de colores, donde podemos seleccionar y armar nuestra paleta a gusto. el control cuenta con muchas propiedades por lo que es necesario que metan mano y jueguen con éste para aprender para qué sirve cada una, yo no tengo ganas de hacer un archivo de ayuda :), pero mirando los ejemplos es fácil darse cuenta para qué sirve cada una.

ucProgressCircular2020.png
ucProgressCircular2020.png

21/09/21 Actualizado, se corrigió un error en la pagina de propiedades, al cargar el control en otro proyecto fallaba la el método de obtener el nombre del proyecto. Gracias Eduardo por la función GetProjectName

Mar 172020
 

OBSOLETO

Hola, se trata de un módulo clase que sirve para automatizar whatsApp por medio del Navegador MS Edge + Javascript y VB6 a travez de web.whatsapp.com , no sé si es el caso pero creo que se puede llamar web scraping, este tipo de técnica no suelen durar mucho ya que si WhatsApp cambia parte del contenido html de su web este módulo puede quedar inservible, es para disfrutarlo mientras dure, luego si hay cambios tendrás que buscar la manera de actualizarlo.

Esto puede ser muy útil si se sabe aprovechar, podemos leer y
enviar mensajes de texto, obtener lista de contactos, números telefónicos, foto de perfil y otras.

Es importante aclarar que este módulo requiere Windows 10 y MS Edge (html version) aclaro de html version ya que en estos días Microsoft ha actualizado MS Edge a una versión que utiliza el motor de Chromium, y este no se puede automatizar, la versión clásica de MS Edge utilizaba el motor de Internet Explorer, por eso es que se puede automatizar, el motivo de utilizar Edge y no Internet Explorer es porque éste último no es aceptado por Web.Whatsapp.com, la versión de Chromium aún no es una actualizacion global de windows pero seguramente con el tiempo sea global, no se preocupen se puede volver a la versión html , siguiendo estos pasos como ven pueden tener ambas versiones si así lo desean. ACLARO NO REQUIERE SELENIUM

En la descarga se incluye el módulo y un pequeño ejemplo de uso (recalco es sólo un ejemplo no tiene utilidad alguna), a modo de comentario he realizado un aplicativo utilizando este módulo que sirve para solicitar turnos mediante whatsapp, aún no sé si lo voy a publicar, este funciona mediantes comandos de palabras, algo así como una inteligencia artificial pero de muy muy bajo nivel 🙂 en donde el cliente solicita un turno, la aplicación verifica si está disponible, lo almacena en una base de datos y le envía un mensaje que su turno ha sido reservado.

Para el ejemplo he utilizado un OCX, deben registrarlo (con permisos de administrador); utilice el ocx porque como muchos nombres y palabras utilizan caracteres unicodes lo que incluye los Emojis, si utilizan los controles comunes de vb estos se verían mal e inclusive no funcionaria bien la aplicación.

OBSOLETO

WhatsApp.png

 Posted by at 18:37
Feb 142020
 

Antes que nada quiero aclarar que este control está basado el proyecto Firenze Label, adaptado a GDI+ con muchos agregados ya que el anterior depende de vbRichClient5. Tienen muchas propiedades y eventos que más adelante voy a ir detallando, por el momento voy a subir el control con unos cuantos ejemplos y otros controles que acompañan. Se pueden lograr cosas muy lindas con este control, sólo es cuestion de ir jugando con sus propiedades, se puede crear muchos controles a partir de este label es cuestión de poner un poco de imaginación. Aclaro que no actúa como un control programado, es un label no un botón por lo que está en el desarrollador dar la forma en que se repinta el label cuando se dispara el mouse Down y Up y demás eventos.

Algunas capturas de lo que se puede lograr con el LabePlus LabelPlus.png LabelPlus.png LabelPlus.png LabelPlus.png LabelPlus.png ------------------------------------------------------------------------------------------------------- Descargar la versión 1.5.4, ultima actualización 21/12/2021

 Posted by at 13:25