B
Hier vielleicht auch mal ein Beispiel-Code für die FAQ für die Verwendung von FreeDiskSpaceEx, hab den Code allerdings nicht in ne WinMain gepackt, dürfte aber kein Problem sein, oder ? :
#include <windows.h>
#include <stdio.h>
#include <iostream.h>
void Festplattengroesse_Ermitteln (void);
int main ()
{
Festplattengroesse_Ermitteln();
return 0;
}
void Festplattengroesse_Ermitteln (void)
{
typedef BOOL (WINAPI * PGetDiskFreeSpaceExA)(LPCTSTR,PULARGE_INTEGER,PULARGE_INTEGER,PULARGE_INTEGER); // Adressspeicher
BOOL gdresult=FALSE;
PGetDiskFreeSpaceExA pget=NULL;
char szbuffer[104]="",szlaufwerke[26][10],szhdfrei[20]="";
int n=0,ianzahl=0;
unsigned __int64 i64userfrei=0,i64total=0,i64totalfrei=0;
ianzahl=GetLogicalDriveStrings(104,szbuffer); // Gesamtzanzahl der logischen Laufwerke in Zeichen durch '\0' getrennt ("A:\\\0","B:\\\0" usw.)
pget=(PGetDiskFreeSpaceExA)GetProcAddress(GetModuleHandle("kernel32.dll"),"GetDiskFreeSpaceExA"); // aus der Kernel32.dll die Funktion GetDiskFreeSpaceEx laden, falls sie noch nicht geladen wurde
if(pget!=NULL)
{
for(n=0;n<(ianzahl/4);n++) // ianzahl/4 = Laufwerke insgesamt, laufwerk aus jeweils "A:\\\0" 4 Zeichen besteht
{
sprintf(szlaufwerke[n],"%s",&szbuffer[n*4]);
if(GetDriveType(szlaufwerke[n])==3) // Wenn Typ == 3 (Festplatte)
{
gdresult=pget(szlaufwerke[n],(PULARGE_INTEGER)&i64userfrei,(PULARGE_INTEGER)&i64total,(PULARGE_INTEGER)&i64totalfrei); // Ermittelt des Speichers in einen 64bit Integer
if(gdresult==TRUE)
{
_ui64toa(i64userfrei/(1024*1024),szhdfrei,10); // wichtigste Speichergroesse in char* konvertieren, vorher von Byte nach Megabyte umrechnen (1024*1024)
cout<<"Auf Laufwerk "<<szlaufwerke[n]<<" sind "<<szhdfrei<<" MB verfuegbar !"<<endl;
}
else
cout<<"Fehler kein Zugriff auf Festplatte moeglich !"<<endl;
}
}
}
else
cout<<"Funktion GetDiskFreeSpaceEx nicht verfuegbar !"<<endl;
}
Funktioniert 100% !
[ Dieser Beitrag wurde am 18.12.2002 um 19:13 Uhr von BiGFusel editiert. ]