NovaMonoFix
Errores PHP
X
Usuario
Password
0 FPS

Tutorial WinAPI C++ 3.0 (Introducción al Instalador)

06 de Noviembre del 2010 por Josep Antoni Bover, 0 visitas, 0 comentarios, 0 votos
Categorías : Windows, Programación, C y C++.
La web está en segundo plano, animación en pausa.
Cargando animación...
Tutorial WinAPI C++ 3.0 (Introducción al Instalador)

La tercera entrega de tutoriales WINAPI tiene por objetivo lograr hacer un instalador desde cero. Para ello se trataran temas como la compresion de archivos y el uso de varios controles basicos.

En esencia necesitaremos construir dos aplicaciones que seran el instalador y el ensamblador.

El instalador sera una aplicacion que dentro del mismo ejecutable llevara todos los archivos a instalar comprimidos.

Para crear el instalador necesitaremos hacer una segunda aplicacion que comprima y ensamble todos los archivos a instalar dentro del instalador. Dicha aplicacion se llamara ensamblador.

Instalador

Instalador:

El instalador será un binario ejecutable preparado para leer el final de el mismo donde debería encontrar todos los archivos que deseamos des-empaquetar.

Los archivos de dentro del instalador estarán comprimidos para ocupar menos espacio. Por ello el instalador deberá ser capaz de descomprimir los archivos en memoria y guardar los datos descomprimidos en el disco.

Para la parte de comprimir y descomprimir archivos se utilizara la librería ZLIB creada por Jean-loup-Gailly y Mark Adler, que es de código libre.

Otra capacidad del instalador será la de pedir una elevación de privilegios si el usuario actual no tiene permisos de administrador, ya que sin los permisos de escritura necesarios el instalador no será capaz de crear archivos.

Por ultimo también será capaz de mostrar un dialogo que permita al usuario seleccionar el directorio donde se va a des-empaquetar toda la información.

Ensamblador:

El ensamblador será una aplicación que nos permitirá unir la aplicación del instalador con todos los archivos que se deseemos incluir. Para ello nos pedirá el directorio por defecto de la instalación, el nombre del proyecto, y la ruta del binario que se usara para hacer la instalación. A partir de esos datos mas los archivos que le añadamos deberá ser capaz de juntarlos en un solo binario de forma ordenada para que luego el binario instalador pueda extraerlos.

Además también tendrá la posibilidad de cargar y guardar proyectos de instalación, de forma que nos haga un poco mas cómodo el proceso.

Ensamblador

Ahora que sabemos por encima lo que necesitaremos hacer, dividiremos por partes todos los objetos nuevos que vamos a necesitar en los siguientes tutoriales:

3.01 

Creación del ObjetoBarraProgreso:

  En esta parte crearemos el ObjetoBarraProgreso que simulara un control con una barra de progreso.
APIs / macros: CreateCompatibleDC, CreateCompatibleBitmap, SelectObject, CreateRoundRectRgn, CreateSolidBrush, FillRect, DeleteObject, GradientFill, FrameRgn, BitBlt, DeleteObject y DeleteDC.
Estructuras: TRIVERTEX, y GRADIENT_RECT.
Mensajes: ninguno...
Notificaciones: ninguna...

3.02

Common Dialogs:

  En esta parte crearemos tres objetos: ObjetoDlgAbrir, ObjetoDlgGuardar, y ObjetoDlgDirectorios. Todo esto partiendo de los common dialogs de windows.
APIs / macros: GetOpenFilename , GetSaveFilename , SHBrowseForFolder , y SHGetPathFromIDList .
Estructuras: OPENFILENAME, y BROWSEINFO.
Mensajes: ninguno...
Notificaciones: ninguna...

3.03

Creación del ObjetoEditBox:

  En esta parte crearemos un ObjetoControlEstandar que usaremos para encapsular controles estandar de windows, y crearemos un ObjetoEditBox que heredará de ObjetoControlEstandar, y nos permitirá controlar un editbox de windows.
APIs / macros: InitCommonControlsEx , CreateWindowEx , CreateWindow, CreateFont, SendMessage, GetDlgItemText, SetDlgItemText, GetWindowLongPtr, PostMessage y GetParent.
Estructuras: ninguna...
Mensajes: WM_SETFONT, y WM_COMMAND.
Notificaciones: ninguna...

3.04

Creación del ObjetoButton:

  En esta parte crearemos un ObjetoButton que nos permitirá controlar un button de windows.
APIs / macros: InitCommonControlsEx , CreateWindowEx , CreateWindow, CreateFont, SendMessage, GetDlgItemText, SetDlgItemText, y GetWindowLongPtr.
Estructuras: ninguna...
Mensajes: WM_SETFONT, y WM_COMMAND.
Notificaciones: ninguna...

3.05

Creación del ObjetoComboBox:

  En esta parte crearemos un ObjetoComboBox que nos permitirá controlar un button de windows.
APIs / macros: InitCommonControlsEx , CreateWindowEx , CreateWindow, MAKELPARAM , y SendMessage.
Estructuras: PBRANGE.
Mensajes: PBM_SETRANGE, PBM_GETPOS, y PBM_SETPOS.
Notificaciones: ninguna...

3.06

Creación del ObjetoProgressBar:

  En esta parte crearemos un ObjetoProgressBar que nos permitirá controlar una progress bar de windows.
APIs / macros: InitCommonControlsEx , CreateWindowEx , CreateFont, SendMessage, GetDlgItemText, SetDlgItemText, y GetWindowLongPtr.
Estructuras: ninguna...
Mensajes: WM_SETFONT , WM_COMMAND.
Notificaciones: ninguna...

3.07

Creación del ObjetoListView:

  En esta parte crearemos un ObjetoListView que nos permitirá controlar un listview de windows.
APIs / macros: InitCommonControlsEx , CreateWindowEx , CreateFont, SendMessage, ListView_InserColumn, ListView_InsertItem, ListView_SetItemText, ListView_GetItem, ListView_DeleteItem, ListView_DeleteAllItems, ListView_GetItemState, ImageList_Create, LoadIcon, ImageList_AddIcon, ListView_SetExtendedListViewStyle, ListView_SetImageList, MessageBox
Estructuras: LVCOLUMN, y LV_ITEM.
Mensajes: WM_SETFONT, WM_COMMAND, y WM_NOTIFY.
Notificaciones: NM_DBLCLK.

3.08

Creación del ObjetoTreeView:

  En esta parte crearemos un ObjetoTreeView que nos permitirá controlar un treeview de windows.
APIs / macros: InitCommonControlsEx , CreateWindowEx , CreateFont, SendMessage, TreeView_InsertItem, TreeView_SetItem, TreeView_DeleteItem, TreeView_DeleteAllItems, TreeView_GetRoot, TreeView_GetParent, TreeView_GetChild, TreeView_GetNextItem, TreeView_GetNextItem, TreeView_GetSelection, ImageList_Create, LoadIcon, ImageList_AddIcon, y TreeView_SetImageList.
Estructuras: TVITEM, TVINSERTSTRUCT, NMHDR a NMTVCUSTOMDRAW
Mensajes: WM_SETFONT, WM_COMMAND, y WM_NOTIFY.
Notificaciones: NM_CUSTOMDRAW.

3.09

Creación del ObjetoZLIB:

  En esta parte crearemos un ObjetoZLIB que nos permitira utilizar la librería ZLIB para comprimir y descomprimir datos.
APIs / macros: ninguna...
Estructuras: ninguna...
Mensajes: ninguno...
Notificaciones: ninguna...

3.10

Terminando el Instalador:

  En esta parte crearemos la ventana del instalador y usaremos algunos objetos de los anteriormente creados.
APIs / macros: IsUserAnAdmin, CommandLineToArgvW, GetCommandLine, ShellExecute, LocalFree, GetLastError, FormatMessage, y MessageBox.
Estructuras: ninguna...
Mensajes: ninguno...
Notificaciones: ninguna...

3.11

Terminando el Ensamblador:

  En esta parte crearemos la aplicación que nos permitirá ensamblar el instalador con los datos a instalar.
Ademas veremos como realizar busquedas recursivas, y como crear dialogos en vez de ventanas.
APIs / macros: DialogBoxParam, SetWindowLongPtr, FindFirstFile, y FindNextFile.
Estructuras: WIN32_FIND_DATA.
Mensajes: WM_INITDIALOG.
Notificaciones: ninguna...

Requisitos:

  • Conocimientos básicos de C o C++.
  • Entorno Windows XP o superior.
  • Compilador Visual Studio express 2008 o superior.
  • Ganas de hacer trabajar el coco.