Articolo: Smart Device - Rilevare la memoria di un palmare tramite Visual
Basic Net e C#.
Tramite l'api GlobalMemoryStatus e GetSystemMemoryDivision
possiamo rilevare i dati relativi alla memoria. In particolare, la memoria
totale, quella fisica, quella virtuale, il file page, ed altro ancora.
Inseriamo i namespace per la gestione delle api, ed uno per il testo (il
testo indicherà le informazioni nella messagebox). Di seguito si riportano tali spazi di nomi.
Vb.Net
Imports
SystemImports
System.RunTime.InteropServicesImports
System.TextImports
System.Windows.FormsC#
using
System;using
System.Collections.Generic;using
System.ComponentModel;using
System.Data;using
System.Drawing;using
System.Text;using
System.Windows.Forms;using
System.Runtime.InteropServices;
A questo punto dopo aver aggiunto gli opportuni spazi di nomi, si crea una
struttura per la gestione dei vari dati informativi sulla memoria. Di seguito si
riporta i campi di tale struttura.
Vb.Net
Public
StructureMEMORYSTATUS
Public
dwLength As UInt32
Public
dwMemoryLoad As
UInt32
Public
dwTotalPhys As
UInt32
Public
dwAvailPhys As
UInt32
Public
dwTotalPageFile As
UInt32
Public
dwAvailPageFile As
UInt32
Public
dwTotalVirtual As
UInt32
Public
dwAvailVirtual As
UInt32
End
Structure
C#
//Struttura per il rilevamento della memoria (caricata, totale, ecc)
public
struct
MEMORYSTATUS
{
public
uint dwLength;
public
uint dwMemoryLoad;
public
uint dwTotalPhys;
public
uint dwAvailPhys;
public
uint dwTotalPageFile;
public
uint dwAvailPageFile;
public
uint dwTotalVirtual;
public
uint dwAvailVirtual;
}
A questo punto inseriamo la dichiarazione di api, nella nostra form, come
riportato qui di seguito.
Vb.Net
'api per la gestione della memoria
Public
Declare
Function GlobalMemoryStatus
Lib
"CoreDll.Dll" _
(
ByRef msAs MEMORYSTATUS)
As
Integer
'api per la gestione della memoria
Public
Declare
Function
GetSystemMemoryDivision Lib
"CoreDll.Dll" _
(
ByReflpdwStorePages As
UInt32, _
ByRef
ldpwRamPages As
UInt32, _
ByRef
ldpwPageSize As
UInt32) As
Integer
C#.
//api per la gestione della memoria
[System.Runtime.InteropServices.
DllImport("CoreDll.Dll")]public
static
extern
int GlobalMemoryStatus(ref
MEMORYSTATUS ms);
//api per la gestione della memoria
[System.Runtime.InteropServices.
DllImport("CoreDll.Dll")]public
static
extern
int GetSystemMemoryDivision(ref
uint lpdwStorePages,
ref
uint ldpwRamPages,
ref
uint ldpwPageSize);
Il programma è quasi completato, non resta che creare una funzione da
utilizzare nel form, il quale fa uso della funzione api. In particolare per
l'api globalmemoryStatus, viene passata la struttura creata precedentemente. Di
seguito si riporta tale funzione.
Vb.Net
Public
Shared
Sub ShowMemory()
Dim storePages
As UInt32
Dim ramPages
As UInt32
Dim pageSize
As UInt32
Dim Intres
As
Integer =
GetSystemMemoryDivision(storePages, ramPages, pageSize)
' tramite l'api globalmemorystatus
rilevo la memoria
Dim memStatus
As
New MEMORYSTATUS
GlobalMemoryStatus(memStatus)
' compongo il testo per il messaggio
Dim
StrbMemoryInfo As
New StringBuilder
StrbMemoryInfo.Append(
"MemoriaCaricata: " _
& memStatus.dwMemoryLoad.ToString() & vbCrLf)
StrbMemoryInfo.Append(
"Totale Fisica: "_
& memStatus.dwTotalPhys.ToString() & vbCrLf)
StrbMemoryInfo.Append(
"Aviata Fisica: "_
& memStatus.dwAvailPhys.ToString() & vbCrLf)
StrbMemoryInfo.Append(
"Totale PageFile: " _
& memStatus.dwTotalPageFile.ToString() & vbCrLf)
StrbMemoryInfo.Append(
"Avviato PageFile: " _
& memStatus.dwAvailPageFile.ToString() & vbCrLf)
StrbMemoryInfo.Append(
"Totale Virtuale:" _
& memStatus.dwTotalVirtual.ToString() & vbCrLf)
StrbMemoryInfo.Append(
"AvviataVirtuale: " _
& memStatus.dwAvailVirtual.ToString() & vbCrLf)
MsgBox(StrbMemoryInfo.ToString())
End
Sub
C#
public
void ShowMemory()
{
uint storePages =
0;
uint ramPages =
0;
uint pageSize =
0;
int res =
GetSystemMemoryDivision(ref
storePages,
ref ramPages,
ref pageSize);
// tramite l'api globalmemorystatus
rilevo la memoria
MEMORYSTATUS
memStatus = new
MEMORYSTATUS();
GlobalMemoryStatus(
refmemStatus);
// compongo il testo per il messaggio
StringBuilder
StbMemoryInfo = new
StringBuilder();
StbMemoryInfo.Append(
"Memoria Caricata:"
+ memStatus.dwMemoryLoad.ToString() +
"\n");
StbMemoryInfo.Append(
"Totale Fisica: "+ memStatus.dwTotalPhys.ToString() +
"\n");
StbMemoryInfo.Append(
"Avviata Fisica: "+ memStatus.dwAvailPhys.ToString() +
"\n");
StbMemoryInfo.Append(
"Totale Page File:"
+ memStatus.dwTotalPageFile.ToString() +
"\n");
StbMemoryInfo.Append(
"Avviata PageFile: "
+ memStatus.dwAvailPageFile.ToString() +
"\n");
StbMemoryInfo.Append(
"Totale Virtuale:"
+ memStatus.dwTotalVirtual.ToString() +
"\n");
StbMemoryInfo.Append(
"Aviata Virtuale:"
+ memStatus.dwAvailVirtual.ToString() +
"\n");
MessageBox.Show(StbMemoryInfo.ToString());
}
Dall'evento click di un pulsante, possiamo invocare tale funzione, in questo
modo verrà visualizzato a video un messaggio contenente le informazioni alla
memoria.
Vb.Net
Private
SubBtnVisualizza_Click(ByVal
sender As System.Object,
ByVal e
As System.EventArgs)
Handles BtnVisualizza.Click
'Per visualizzare la memoria avviare la
funzione
ShowMemory()
End
Sub
C#
private
void btnVisualizza_Click(object
sender, EventArgs e)
{
//Per visualizzare la memoria avviare la
funzione
ShowMemory();
}
Conclusioni
In questo articolo, si è visto come creare un applicazione per dispositivo
mobile, il quale visualizza a video un messaggio relativo alla memoria. Il tutto
tramite le api di windows. Le api di windows, possono aiutare di molto lo sviluppo
in ambiente mobile.
Nessun commento:
Posta un commento