Crear un archivo autoextraible con Delphi

Este es un ejemplo, muy sencillo, de como crear un fichero autoextraible. Este pequeño programa funciona de una manera muy simple, si se le pasa como parámetro un archivo, crea una copia de si mismo donde se incrusta una copia comprimida del archivo que se le paso como parámetro. Y si por el contrario, el programa detecta que tiene un fichero incrustado lo extrae.

Extraer imagenes de un fichero MPO

Recientemente han llamado mi atención sobre el formato de imagen MPO (Multi-Picture Format), un formato que se usa dentro del campo de la fotografía en 3D, y concretamente es el utilizado por la cámara FinePix REAL 3D. Básicamente un fichero MPO esta compuesto por una imagen principal, y una serie de imágenes secundarias, guardadas en formato JPEG. La imagen principal está colocada justo al comienzo del fichero de tal forma que podría ser vista por cualquier visor de imágenes jpeg, mientras que para ver el resto de imágenes necesitamos de algún software especifico que soporte este formato.

Contador de billetes y monedas

Esta es una utilidad, muy sencilla, que facilita la tarea de contar el dinero que hay en el cajón a la hora de hacer el cierre de caja en un negocio. Simplemente se van contando los billetes y monedas para luego introducir las cantidades en el programa, y este nos calcula el importe total. A simple vista no parece ser muy útil, pero ahora pensemos en el dueño de una tienda a la hora de cerrar, con ganas de irse a su casa, contando las monedas y los billetes usando una calculadora manual y teniendo que ir anotando los resultados intermedios en un papel para luego sumar y obtener el total.

PrintTest

Esta herramienta surgió de la necesidad de comprobar el funcionamiento de impresoras de tickets, es decir, que corta bien, que imprime el logo correcto, etc. Su funcionamiento es realmente simple, se selecciona la impresora, se escribe la secuencia de escape y se pulsa el botón "Enviar". No importa si la impresora es serie, paralelo, usb o es una impresora compartida desde otro equipo, el único requisito es que este instalada, aunque sea como una impresora "Genérica / Solo texto".

Espiar las comunicaciones de otros procesos

Seguro que alguna vez has tenido curiosidad por saber como funciona otro proceso, que envía y que recibe a través de internet, para esta tarea ya existen programas muy buenos, por ejemplo wireshark, pero lo que aquí propongo es hacerlo nosotros mismos desde un programa en delphi. Puede que el resultado no sea muy profesional, pero sirve perfectamente como ejemplo de como inyectar código en otro proceso e interceptar las llamadas que hace este a funciones de la API de windows. Solo es una "prueba de concepto", un pequeño juguete, para usarlo de una forma un poco más seria habría que limar un poco el código, pero ese no es ahora mismo mi objetivo.

Recuerar imagenes jpeg 3

Hace algún tiempo hablé de como recuperar imágenes jpg de un disco o archivo (aquí y aquí), ahora, además de depurar un poco el código de ambos programas, voy a aprovechar para unirlos en uno solo. El código resultante se puede compilar tanto en delphi como en freepascal, por lo que puede ser usado perfectamente en windows o en linux.

Obtener handle de una ventana a partir del PID de un proceso

Para encontrar el handle de una ventana, existen ya funciones como FindWindow, que permite encontrar una ventana conociendo su título, pero seria interesante poder limitar la búsqueda a las ventanas de un proceso determinado. Esto es lo que hace la función siguiente, encuentra el handle de una ventana, pasándole como parámetro el PID del proceso al que pertenece y opcionalmente el título de la ventana.

Crear archivo log

Cuando una aplicacion falla y hay que averiguar donde esta el error, resulta util tener tener un registro donde hayan quedado guardados, tanto las acciones realizadas como una descripcion de los posibles errores. El siguiente codigo puede ser una solucion rapida y sencilla si necesitamos crear un log, solo tenemos que llamar a la funcion con el mensaje a registrar y la propia funcion se encarga de guardar tambien la fecha, se preocupa de no entrar en conflicto con otros threads y cuando el tamaño del archivo se vuelve excesivo lo renombra y crea uno nuevo. Es decir, nosotros solo tenemos que añadir esta funcion a nuestro codigo y despreocuparnos de lo demas.