Kirjoittaja: sooda
Kirjoitettu: 04.05.2004 – 10.07.2015
Tagit: koodi näytille, vinkki
Tietokoneen muistin määrän (fyysisen ja virtuaalisen sekä sivutustiedostossa olevan) saa selville WinAPI-funktiolla GlobalMemoryStatus. Tämä ohjelma kertoo määrät tavuina, kilotavuina, megatavuina ja gigatavuina sekä prosentteina. Tosi hyödykäs!
Binääri: http://sooda.dy.fi/foo/memoori.exe
formille
Private Sub Form_Load()
Dim muisti As MEMORYSTATUS 'muistipalikka apikutsua varten
Show 'esiin
AutoRedraw = True 'tämä pitää tehdä aina :P
Move Left, Top, 15 * 700, 15 * 250 'sopivan kokoiseksi
Font = "Courier New" 'fontti tasalevyiseksi, helpompi lukea tätä
Dim yht(2) As Long, vapaana(2) As Long, käytössä(2) As Long 'näin selvitään vähemmällä koodilla
Dim selite(2) As String
selite(0) = "Fyysinen muisti"
selite(1) = "Sivutiedosto"
selite(2) = "Virtuaalinen muisti"
Do 'monitoroidaan ikuisesti kunnes ohjelma loppuu
GlobalMemoryStatus muisti 'haetaan muistitiedot
'setataan muistin arvot taulukkoihin...
yht(0) = muisti.dwTotalPhys
yht(1) = muisti.dwTotalPageFile
yht(2) = muisti.dwTotalVirtual
vapaana(0) = muisti.dwAvailPhys
vapaana(1) = muisti.dwAvailPageFile
vapaana(2) = muisti.dwAvailVirtual
käytössä(0) = yht(0) - vapaana(0)
käytössä(1) = yht(1) - vapaana(1)
käytössä(2) = yht(2) - vapaana(2)
Cls 'vanhat tekstit vek
DoEvents 'ettei ohjelma tilttaa
For i = 0 To 2 'printataan eri muistin osat
Print selite(i) 'minkä muistipalikan info
'näitä tuskin tarvitsee selittää :)
Print "Yhteensä: " & kerro(yht(i)) & "."
Print "Vapaana: " & kerro(vapaana(i)) & " eli " & _
Round(vapaana(i) / yht(i) * 100, 2) & " prosenttia."
Print "Käytössä: " & kerro(käytössä(i)) & " eli " & _
Round(käytössä(i) / yht(i) * 100, 2) & " prosenttia."
Print
Next
s = Timer 'aloitusaika
Do 'loopataan tyhjää ettei tekstit vilkkuisi ikävästi
DoEvents
Loop Until s + 2 < Timer 'tehdään eimitään kunnes kaksi sekkaa on mennyt
Loop
End Sub
Function kerro(mitä) 'kertoo mitä:n tavuissa, kiloissa, megoissa ja gigoissa
kerro = mitä & " tavua eli " & _
mitä \ 1024 & " kiloa eli " & _
mitä \ 1024 \ 1024 & " megaa eli " & _
Round(mitä / 1024 / 1024 / 1024, 2) & " gigaa"
End Function
Private Sub Form_Unload(Cancel As Integer)
End 'häivytään, muuten formi menisi piiloon mutta ohjelma jäisi silti päälle
'looppaamaan form_load:in do-loop:iin
End Submotuuliin
Declare Sub GlobalMemoryStatus Lib "KERNEL32" (lpBuffer As MEMORYSTATUS)
Type MEMORYSTATUS
dwLength As Long
dwMemoryLoad As Long
dwTotalPhys As Long
dwAvailPhys As Long
dwTotalPageFile As Long
dwAvailPageFile As Long
dwTotalVirtual As Long
dwAvailVirtual As Long
End TypeFyysisen muistin määrä näkyi oikein kilotavuissa mutta heitti yhdellä megalla megatavuissa.
Niin niin.. ihan suotta alan naimaan pilkkua..
Kiva, kiva..
Tuomas, taitaa olla joku pyöristysvirhe tai sitten meitä kaikkia huijataan ja muistia on aina yksi mega liian vähän, se heittää kaikissa noin. Jos siihen lisäisi yhden niin kun muistia olisi nolla niin sitä olisikin yksi :)
Millä tämä kääntyy? Pistäkää nettiosote ja suora latauslinkki, koska en jaksa etsiä monia sivuja läpi.
hyvä koodivinkki.
Michael Halvorsonhan väänsi tästä jonkun progressbaareilla toimivan muistimittarin...