Resulta sencillo que un ratón tenga cabeza,
basta con alargar la mano y dejar que las ideas fluyan a través de ella.

Su visita a esta página es a la vez una invitación y una provocación
A continuación les presento una serie de pequeñas muestras de mis capacidades en el campo del diseño gráfico, la fotografía, la programación y el desarrollo web. Todavía quedan muchas cosas que mostrar y demostrar pero valga para ellas este adelanto.

Invitación a mostrar.
Provocación para demostrar.
fecha de hoy: 21(Thu) - August - 2008
Información de Sistema con las API

 

Información de Sistema con las API de windows

Imaginemos una conversación entre alguien que no sabe nada de informática y alguien que empieza a conocer de que va el mundillo este.

- ¿API de Windows?, ¿qué es eso?
- Las API son una extensa colección de funciones propias del sistema operativo de Microsoft Windows que realizan las tareas diarias o mas habituales.
- Si, bueno, ya. ¿Y eso que significa?
- Verás. Los programas que corren bajo el sistema operativo de tu ordenador necesitan de unas funciones para realizar tareas rutinarias comunes a todos ellos. Por ejemplo, un programa "cualquiera 2.1" llama a una función determinada de las API para representar una imagen en pantalla, almacenar un archivo, asignar memoria. Estas funciones se dividen en varias categorías según sus cometidos: dispositivos de sistema, gestión de aplicaciones, multimedia, etc. Cuentan las malas lenguas que existen mas de mil funciones.
- Si, claro. ¿Y eso que tiene que ver con la programación en visual basic?
-Verás, con un poco de paciencia e investigación puedes conseguir implementar algunas de estas funciones en el programa que crees en este entorno para aportar a la aplicación muchas funcionalidades interesantes. Por ejemplo, puedes crear un programa que controle la información actual de tu sistema, sus recursos, memoria disponible, etc.
- ¿Y eso como se hace?
- Es fácil, simplemente realizando llamadas a esas funciones dentro de tu programa en el lugar espécifico para realizar dichas declaraciones. ¿lo vas entendiendo ahora?
- No.
- Es igual. No hace falta que lo entiendas. Los programas ya lo hacen por ti.
- Ah.

Según esta conversación nos queda claro que existen unas funciones propias de un "entorno mágico" llamado API de windows, que permiten implentar funciones rutinarias del sistema dentro de nuestras aplicaciones, simplemente estableciendo unas llamadas o declaraciones de las funciones que necesitemos.

Explícame algunas funciones con un ejemplo.

Vamos a crear una sencilla aplicación que nos muestre información importante de nuestro sistema. Crearemos un formulario que contenga un número determinado de etiquetas en las cuales se mostrará información de Propiedad del Ordenador, Sistema Operativo actual, resolución de pantalla, recursos disponibles, memoria disponible, etc.

Lo primero que tendremos que hacer será declarar cada una de estas llamadas a las funciones de API correspondientes. A continuación realizamos llamadas a esas funciones con los parámetros correspondientes para obtener dicha información. Analicemos a continuación unas cuantas que nos pueden resultar úitiles:

Private Declare Sub GlobalMemoryStatus Lib "kernel32" (lpBuffer As MEMORYSTATUS)
Esta función proporciona información sobre la memoria física y la memoria virtual disponibles. En la sección de declaraciones de nuestro programa declararemos esta función tal y como se muestra.
ejemplo de uso:

GlobalMemoryStatus MemSts
Memory1 = MemSts.dwTotalPhys
Msg1 = "Memoria Física Total: " & Memory1 / 1024000 & "Mb"
Memory2 = MemSts.dwAvailPhys
Msg2 = "Memoria Fisica Disponible: " & Memory2 / 1024000 & "Mb"
Memory3 = MemSts.dwTotalVirtual
Msg3 = "Memoria Virtual Total: " & Memory3 / 1024000 & "Mb"
Memory4 = MemSts.dwAvailVirtual
Msg4 = "Memoria Virtual Disponible: " & Memory4 / 1024000 & "Mb"
La primera línea crea un buffer que contiene toda la información sobre el estado de la memoria y se asigna a la variable MemSts que, con posterioridad, irá ofreciendo los datos que contiene según los parámetros que se le indiquen. Así MenSts.dwTotalPhys devuelve el total de la memoria física, MemSts.dwAvailPhys devolverá la memoria física disponible, MemSts.dwTotalVirtual nos proporcionará el total de la memoria virtual del sistema y MemSts.dwAvailVirtual la memoria virtual disponible en ese momento

Private Declare Function RegOpenKey Lib "advapi32" Alias "RegOpenKeyA" (ByVal hkey As Long, ByVal lpSubkey As String, phkResult As Long) As Long
Private Declare Function RegCloseKey Lib "advapi32" (ByVal hkey As Long) As Long

Incluyo ambas funciones juntas ya que permiten abrir y cerrar un valor o campo determinado del registro de windows. Para operar con los datos que contiene el resgistro es necesario, previamente, haber realizado la función de apertura de la clave que contiene dicho dato, es decir, abrir la puerta de ese dato para modificarlo, borrarlo, crear uno nuevo. Posteriormente a la función de apertura de esa clave se debe ejecutar la función de cierre de la misma.
ejemplo de uso:

X = RegOpenKey(HKEY_LOCAL_MACHINE, "Software\Microsoft\Windows\CurrentVersion", hkey) Abre la clave correspondiente almacenada en la dirección especificada como parámetro
X = RegCloseKey(hkey) Cierra la clave anterior

Private Declare Function RegQueryValueEx Lib "advapi32" Alias "RegQueryValueExA" (ByVal hkey As Long, ByVal lpValueName As String, ByVal lpReserved As Long, lpType As Long, lpData As Any, lpcbData As Long) As Long
Esta función devuelve el tipo y valor de un dato determinado almacenado en el registro de windows abierto en ese momento.
ejemplo:

X = RegQueryValueEx(hkey, "RegisteredOwner", 0, lngType, ByVal strUser, lngLen) Devolverá el valor correspondiente al propietario del ordenador una vez que el registro donde está almacenado este dato haya sido abierto.

Private Declare Function GetVersion Lib "kernel32" () As Long
Esta función devuelve la versión del Sistema Operativo Windows que está funcionando en ese momento e información acerca de la plataforma actual.

Private Declare Function GetTickCount Lib "kernel32" () As Long
Nos devuelve el número de milisegundos que han transcurrido desde que se ha arrancado la sesión actual de Windows.

Private Declare Function GetFreeResources Lib "rsrc32" Alias "_MyGetFreeSystemResources32@4" (ByVal restype As Integer) As Integer
Nos devuelve información sobre los recursos libres de nuestro sistema en ese momento.

Private Declare Function GetComputerName Lib "kernel32" Alias "GetComputerNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Esta función nos permite conocer el nombre del computador sobre el que está corriendo actualmente el sistema operativo. El nombre se establece en la configuración del sistema durante la instalación del mismo y queda registro del mismo al arranque de cada sesión de windows al ser inicializado desde el registro.

Private Declare Function GetUserName Lib "advapi32.dll" Alias "GetUserNameA" (ByVal lpBuffer As String, nSize As Long) As Long
Esta función devuelve el nombre del usuario actual de la sesión windows.

Private Declare Function GetDeviceCaps Lib "gdi32" (ByVal hdc As Long, ByVal nIndex As Long) As Long
Esta función nos permite obtener información específica sobre un dispositivo específico.
ejemplo de uso:

Col = GetDeviceCaps(frmInfo.hdc, BITSPIXEL)
Largo = GetDeviceCaps(frmInfo.hdc, HORZRES)
Alto = GetDeviceCaps(frmInfo.hdc, VERTRES)
Las variables Col, Largo y Alto obtienen los valores de número de colores, ancho de pantalla y alto de pantalla, respectivamente, a través de la función indicada, con los parámetros correspondientes (BITSPIXEL, HORZRES, VERTRES).



Private Declare Function GetLogicalDriveStrings Lib "kernel32" Alias "GetLogicalDriveStringsA" (ByVal nBufferLength As Long, ByVal lpBuffer As String) As Long
Private Declare Function GetDriveType Lib "kernel32" Alias "GetDriveTypeA" (ByVal nDrive As String) As Long
Private Declare Function GetDiskFreeSpace Lib "kernel32" Alias "GetDiskFreeSpaceA" (ByVal lpRootPathName As String, lpSectorsPerCluster As Long, lpBytesPerSector As Long, lpNumberOfFreeClusters As Long, lpTotalNumberOfClusters As Long) As Long

Estas funciones devuelven ifnroación sobre los dispositivos de almacenamiento disponibles en el ordenador, informando sobre el tipo, capacidad, etc.

Este es un breve (muy breve) resumen sobre distintas funciones del API de windows y la manera que tienen de brindarnos información que nos pueda resultar útil. Es evidente que el estudio de estas funciones requiere un libro (muy extenso) a parte, por lo que no me extenderé mas en el tema en esta sección.

Opino, según mi punto de vista particular, que la mejor manera de comprobar el funcionamiento de todo lo explicado anteriormente es a través de ejemplos prácticos. A continuación os ofrezco los archivos de un formulario realizado en visual-basic que ofrece información sobre el sistema. Te recomiendo que lo descargues y le eches un vistazo ya que puede resultarte útil (si no todo, alguna parte) para el desarollo de tus propios programas.

descargar .zip con archivos vb de ejemplo

Si deseas ampliar la información sobre el tema, si tienes alguna duda, o simplemente si tienes otras ideas o sugerencias no dudes en ponerte en contacto conmigo.

Gracias.
Luis Álvarez

 
La cabeza del Ratón


'nuevomilenio' es una idea de Luis Álvarez
'CSI/dilvish666' es propiedad intelectual


CSI/dilvish666 - A Coruña
nuevomilenio@retemail.es