Sección de tutoriales y manuales vb
Con la función Api GlobalMemorySatus podemos obtener información de la memoria del sistema, ya sea la memoria libre, la memoria usada, el total de la memoria física y el estado de la memoria swap o archivo de intercambio de windows (memoria virtual)
Para poder utilizar esta función es necesario declarar junto con la función Api GlobalMemorySatus, una estructura de datos de tipo MEMORYSTATUS
La declaración de la función Api y la estructura de datos mencionada es la siguiente:
'Api GlobalMemoryStatus Private Declare Function GlobalMemoryStatus Lib "Kernel32" (lpBuffer As MEMORYSTATUS) As Long 'Type o estructura para usar con GlobalMemoryStatus dwLength As Long End Type |
Como podemos ver la función tiene una estructura de datos definida.
El campo o variable dwLength no nos retorna un valor de
información específica sobre el estado de la memoria. Esta
variable es necesaria cargarla antes de llamar a la función para
que nos devuelva los valores que queremos obtener sobre la memoria.
si no cargamos esta variable antes de llamar a la función, esta función
no funcionará.
Programa de ejemplo:
Antes de comenzar vamos a describir en que consiste este ejemplo.
En un formulario colocaremos una serie de controles Labels que nos informarán sobre el estado de la memoria. Los datos a mostrar serán:
El código completo:
'Función GlobalMemoryStatus Private Declare Function GlobalMemoryStatus Lib "Kernel32" (lpBuffer As MEMORYSTATUS) As Long 'type GlobalMemoryStatus dwLength As Long End Type Private Sub Command1_Click() Private Sub MostrarMemoria() Dim porcentaje As Integer memoria.dwLength = Len(memoria) porcentaje = 100 - memoria.dwMemoryLoad Label1 = Format(porcentaje, "00.0") & "%" Shape2.Width = 1935 / 100 * porcentaje 'Mostramos el porcentaje representado en el control Shape 'Mostramos la información en los labels devueltos End Sub Private Sub Form_Load() Command1.Caption = "Mostrar memoria" End Sub |
Descripción del código:
En la línea Dim
memoria As MEMORYSTATUS creamos una variable de tipo MEMORYSTATUS
para luego poder acceder a los valores que retorne la función Api.
En la línea Dim porcentaje As Long creamos una variable que contendrá el porcentaje de la memoria libre
En la líneamemoria.dwLength = Len(memoria) cargamos la variable dwLength con el tamaño de la estructura antes de llamar a la función
En esta línea llamamos a la función GlobalMemoryStatus
retorno
= GlobalMemoryStatus(memoria)
en porcentaje = 100 - memoria.dwMemoryLoad estamos asignando a la variable porcentaje la memoria libre del sistema. como el valor dwMemoryLoad lo devuelve en un número que es el porcentaje real de memoria, para obtener el porcentaje de memoria libre le restamos a 100 el valor de la memoria leída.
En la líneaLabel2 = Format(porcentaje, "00.0") & "%" asignamos al label2 el valor del porcentaje de memoria pero con el formato con un dígito después del decimal y le agregamos el caracter de porcentaje.
Para mostrar una barra de porcentaje que indíque la memoria libre,se agregan 2 controles shape. Colocando un control shape1 sin relleno, o sea que se vea solo el contorno del mismo, . Luego agrega otro shape2 exactamente del mismo tamaño y lo colocas justo encima del otro shape1, pero a este le pones un color de fondo que sea sólido. luego pega este código:
En la línea
Label3 = Format(memoria.dwTotalPhys / 1000000, "00.0") & " MB"
Obtenemos el valor de la memoria física total del sistema. Como todos los valores retornados por la función api están expresados en bytes nosotros lo convertiremos a Megabytes . Luego le aplicamos el formato como lo hemos hecho en la línea anterior.
La linea
Label4 = Format(memoria.dwAvailPhys / 1000000, "00.0") & " MB"
obtenemos la memoria física disponible
En la última línea obtenemos la memoria utilizada por el archivo de intercambio o archivo de paginación
Por último para refrescar los datos , en el command1 en el evento Click volvemos a ejecutar al procedimiento MostrarMemoria, con esto llamamos nuevamente a la rutina y los datos se actualizan.
Ahora un programa de ejemplo que nos permita ver la capacidad de los discos duros de nuestra pc, el espacio utilizado en Megas, el porcentaje utilizado, el porcentaje libre y una barra de gráfico hecha con un control shape, para que nos muestre los porcentaje pero en forma gráfica, como en el ejemplo anterior
para ello utilizaremos la función GetDiskFreeSpaceEx
Imagen previa del ejemplo:
Aunque la función para ser muy complicada a simple vista, es muy sencilla de utilizar.
La declaración completa de GetDiskFreeSpaceEx es la siguiente:
'Api GetDiskFreeSpaceEx Private Declare Function GetDiskFreeSpaceEx Lib "Kernel32" Alias "GetDiskFreeSpaceExA" (ByVal RootPathName As String, lpFreeBaytesAvailableToCaller As Currency, lpTotalNumberofBytes As Currency, lpTotalNumberofFreeBytes As Currency) As Long |
Esta función Api que se encuentra en el núcleo del sistema operativo, tiene 4 parámetros.
En el primero debemos enviarle una cadena o variable que indique la unidad a la cual queremos obtener información, ya sea un disco duro o una partición, una unidad de disquete, un cd-rom, etc... . Osea es un dato de tipo string, por ejemplo "c:"
El segundo parámetro al igual que el ultimo, nos devolverá un número que representa el espacio libre en disco. La variable que debemos enviar aquí debe ser de tipo Currency (entero de 64 bits), ya que si enviamos una de tipo entero largo (Long de 32 bits, nos daría un error de desbordamiento). esto sucede por que la función devuelve el número de bytes libres expresado en bytes, y hoy en día los discos duros suelen ser muy grandes, por lo cual nos devolvería un número gigante que no podría caber en una variable de tipo Double
Nota : Estos 2 parámetros devuelven el espacio
total y parecen ser exactamente iguales aunque con una diferencia.
El parámetro 2 (lpFreeBaytesAvailableToCaller) devolverá el
espacio libre de la unidad del usuario que hace la llamada a la función,
por que por ejemplo si tenemos un disco compartido tal vez no muestre el
valor real del espacio libre de la unidad, si no el espacio libre que tengo
asignado para mí o para el usuario que la llama.
El cuarto parámetro (lpTotalNumberofFreeBytes) nos devuelve el espacio
libre sin tomar en cuenta la aclaración anterior. en este
ejemplo nosotros trabajaremos con el valor retornado del 4 parámetro
(lptotalnumberoffreebytes)
El tercer parámetro nos va a devolver el espacio total de la unidad.
Pasos a seguir:
'Función Api GetDiskFreeSpaceEx Private Declare Function GetDiskFreeSpaceEx Lib "Kernel32" Alias "GetDiskFreeSpaceExA" (ByVal RootPathName As String, lpFreeBaytesAvailableToCaller As Currency, lpTotalNumberofBytes As Currency, lpTotalNumberofFreeBytes As Currency) As Long Private Sub Drive1_Change() MostrarDatos End Sub Private Sub MostrarDatos() On Error GoTo mensaje Dim Disco As String Disco = Left(Drive1.Drive, 2) Capacidad = Capacidad * 10000 / 1000000 Label1 = Format(Capacidad, "0.00") & " MegaBytes" PorcentajeLibre = Libre * 100 / Capacidad PorcentajeUsado = (Capacidad - Libre) * 100 / Capacidad Shape2.Width = 4695 / 100 * PorcentajeLibre Exit Sub mensaje: MsgBox "Compruebe que la unidad accedida esté disponible", vbInformation + vbOKOnly, "error al acceder a la unidad" End Sub |
1 - Descripción de las variables del ejemplo: la variable disco
de tipo string es la que almacenará la unidad seleccionada en el
control Drive1. Mas abajo, en la línea que dice:
Disco
= Left(Drive1.Drive, 2)
lo que hacemos es extraer solo la letra de la unidad y los 2 puntos (ejemplo:
c:), para poder pasársela correctamente a la función. Si le
pasáramos el valor del drive, nos daría error por que el DriveListBox,
en la mayoría de los casos muestra la unidad con el nombre del volumen
de la misma, y la api no aceptaría este valor.
2 - Las variables capacidad y libre de tipo Currency, son las que enviaremos a la función Api para que nos devuelva el valor del espacio total y el espacio libre de la unidad respectivamente.
3 - Las variables porcentajelibre y porcentajeusado almacenarán luego de una operación , los valores respectivos.
4 - En el evento Change del control Drive1, llamamos a la Sub Mostrardatos para llamar al procedimiento de código cada vez que seleccionemos o cambiemos la unidad.
5 - En la línea Capacidad = Capacidad * 10000 / 1000000 lo que hacemos es convertir el número. Primero debemos multiplicarlo por 10000 para obtener el valor real. Luego lo dividimos por 1000000 para que el número quede expresado en MegaBytes(1 millón)
6 - Luego en la línea
Label1
= Format(Capacidad, "0.00") & " MegaBytes"
asignamos al control Label1 el valor ya convertido de la variable capacidad
y lo formateamos correctamente.
7 - En la línea
Label2
= Format(Capacidad - Libre, "0.00") & " MegaBytes Usados"
estamos asignando el espacio o megas usados. Para esto
hacemos la resta entre el espacio total y el espacio
libre. Después le damos el formato correcto.
8 - La línea
PorcentajeLibre
= Libre * 100 / Capacidad
utiliza una regla de tres para obtener el espacio libre pero en porcentaje.
Lo mismo hacemos con la variable porcentajeUsado
9 - luego asignamos a los Label4 (bytes libres) y Label5 (bytes usados) los valores de las variables anteriores.
10 - Para mostrar una barra de gráfico utilizamos 2 controles shape del mismo tamaño uno encima del otro. El shape1 no tiene que tener color de fondo.
Aclaración: en la línea :
shape2.width = 4695 / 100 * porcentajelibre
donde dice 4695, se refiere al ancho que tenga tu control shape.
Para descargar el zip con el ejemplo:
Obtener el espacio de las unidades - Api GetDiskFreeSpaceEx
Enlace relacionado :
Obtener información de una unidad con File system Object - Fso
En esta sección vamos a utilizar 2 funciones Api para obtener información del sistema operativo. Con la función GetVersionEx podemos recuperar la plataforma y versión de windows; y para conocer el directorio donde se encuentra instalado el mismo vamos a utilizar la función api GetWindowsDirectory.
Para obtener el directorio donde se encuentra instalado windows, no necesitamos declarar junto a la Api ninguna estructura de datos ni constantes. Lo que debemos pasar en el primer parámetro de la función, es una variable de tipo String para almacenar el path o ruta del directorio. Pero justo antes de pasar esta variable hay que rellenar la misma con espacios vacíos con la función space de visual basic.
Luego en el segundo parámetro debemos establecer el tamaño de la misma, pasando en este caso como valor el número 255.
Para obtener la plataforma y la versión de windows, usando la función
GetVersionEx, y debemos declarar una estructura de datos
de tipo OSVERSIONINFO que tiene 6 campos o variables definidas.
De estas variables la que retorna el número de serie
y la plataforma son las siguientes:
dwMajorInfoSize : esta variable nos retornará el
primer valor de la versión de windows, por ejemplo si tengo instalada
la versión 4.10, esta variable almacenará el número
4.
dwMinorInfoSize: esta variable almacenará el segundo número, siguiendo el ejemplo anterior almacenará el número 10. luego para mostrar el número de versión completo juntamos las 2 variables.
dwPlatformId : esta variable nos retornará un número que representará la plataforma de windows. Si retorna el 0 o el 1, se tratará de una plataforma de win32 bits, si retorna un 2 se tratará de una versión de windows de tipo NT.
La única aclaración importante antes de usar esta función, es que debemos cargar en la variable dwOSVersionInfoSize As Long el tamaño de la estructura de datos antes de llamar a la función Api, utilizando la función Len de visual basic
'Declaración del Api GetVersionEx Private Declare Function GetVersionEx Lib "kernel32" Alias "GetVersionExA" (lpVersionInformation As OSVERSIONINFO) As Long 'Declaración del Api GetWindowsDirectory Private Declare Function GetWindowsDirectory Lib "kernel32" Alias "GetWindowsDirectoryA" (ByVal lpBuffer As String, ByVal nSize As Long) As Long 'Estructura OSVERSIONINFO para utilizar con las
funciones anteriores dwOSVersionInfoSize As Long End Type Private Sub Command1_Click() Private Sub Form_Load() 'OBTENER LA PLATAFORMA Y LA VERSIÓN DE WINDOWS windows.dwOSVersionInfoSize = Len(windows) 'CARGAMOS
EN ESTA VARIABLE, EL TAMAÑO DE LA ESTRUCTURA, ANTES DE LLAMAR
A LA FUNCIÓN 'OBTENER EL DIRECTORIO End Sub |
Api parte 1 - Api parte 2 - Api parte 3
Buscar en Recursos vb
Recursos visual basic - Buscar - Privacidad - Copyright © 2005 - 2009 - www.recursosvisualbasic.com.ar