Laufwerksinformationen ;)



  • Dieses Prog hilft euch weiter wenn ihr die funktionen
    GetDiskFreeSpaceEx, GetDriveType, TotalNumberOfFreeBytes verstehen wollt .

    Dieses Programm sucht euch alle möglichen Informationen über die PC-Internen Laufwerke raus
    z.B.: Freier-Belegter-Speicher, Laufwerkstyp, Laufwerkserweiterung, Dateisystemsformat

    Ausserdem erkennt es ob eine CD-Eingelegt ist oder nicht

    #include <stdio.h> 
    #include <iostream.h>
    #include <windows.h>
    
    void main()
    {
    
    		//Freier Speicher ermitteln + (NTFS/FAT) + CD-laufwerke (einglegte -nicht eingelegte CD)
    
    		//Initialisierungen
    		char VolumeNameBuffer[256];            // address of name of the volume
    		DWORD VolumeSerialNumber;              // address of volume serial number
    		DWORD MaximumComponentLength;          // address of system's maximum filename length
    		DWORD FileSystemFlags;                 // address of file system flags
    		char FileSystemNameBuffer[256];        // address of name of file system
    		UINT OldErrMode;
    		OldErrMode=SetErrorMode(SEM_FAILCRITICALERRORS);
    		// INITIALISIERUNGE FÜR GESAMMTSPEICHER + FREIER SPEICHER + Prozentausgabe
    		char DirGESAMMT[20];
    		char DirFREI[20];
    		int DirFREIPRO;
    		int DirPRO;
    		ULARGE_INTEGER TotalNumberOfFreeBytes; 
    		ULARGE_INTEGER TotalNumberOfBytes;
    
    		for(char drv='A';drv<='Z';++drv) //Lässtalle Laufwerksbuchstaben von A-Z durchlaufen
    		{
    
    		char adr1[500];
    		char adr2[500];
    		char adr3[500];
    		sprintf(adr1,"%c:\\",drv);//Laufwerksbuchstabenanpassung für die Funktionen
    		sprintf(adr2,"%c:",drv);
    		sprintf(adr3,"%c:\\*.*",drv);
    
    		//kontlolle des freien Speichers
    		if(GetDiskFreeSpaceEx(adr1,NULL,&TotalNumberOfBytes,&TotalNumberOfFreeBytes) == NULL)
    		{
    			if(::GetDriveType(adr1) == DRIVE_CDROM)//Drivetyp Herausfinden
    			{
    			cout<<"("<<drv<<":) CD-Laufwerk\n";
    			}
    		}
    
    		else
    		{
    				if ((int)Int64ShrlMod32(TotalNumberOfFreeBytes.QuadPart,20)>0)//wenn das laufwerk >0 bytes speichern kann
    				{
    				DirPRO=	(int)Int64ShrlMod32(TotalNumberOfBytes.QuadPart,20)/100;//ermittlung eines Prozents des Gesammtspeichers
    				DirFREIPRO=(int)Int64ShrlMod32(TotalNumberOfFreeBytes.QuadPart,20)/DirPRO;//Prozent freier Speicher
    
    				sprintf(DirGESAMMT,"(Gesammt:) %iMB",Int64ShrlMod32(TotalNumberOfBytes.QuadPart,20));// gesammter Speicher 
    
    				sprintf(DirFREI,"(Frei:) %iMB",Int64ShrlMod32(TotalNumberOfFreeBytes.QuadPart,20));// freier speicher
    
    					//Laufwerkstyp Ermittlung
    					if(!GetVolumeInformation(adr2,VolumeNameBuffer,255,
                               		&VolumeSerialNumber,&MaximumComponentLength,
                               		&FileSystemFlags,FileSystemNameBuffer,255 ))
    					{
    
    							if(::GetDriveType(adr1) == DRIVE_REMOTE)
    							{
    							cout<<"("<<drv<<":) Remote Drive: "<<DirGESAMMT<<" "<<DirFREI<<" -> "<<DirFREIPRO<<"% (Error)\n";
    							}
    							else if(::GetDriveType(adr1) == DRIVE_RAMDISK)
    							{
    							cout<<"("<<drv<<":) RamDisk: "<<DirGESAMMT<<" "<<DirFREI<<" -> "<<DirFREIPRO<<"% (Error)\n";
    							}
    							else
    							{
    							cout<<"("<<drv<<":) "<<DirGESAMMT<<" "<<DirFREI<<" -> "<<DirFREIPRO<<"% (Error)\n";
    							}
    
    					}
    					else
    					{
    							if(::GetDriveType(adr1) == DRIVE_REMOTE)
    							{
    							cout<<"("<<drv<<":) Remote Drive: "<<DirGESAMMT<<" "<<DirFREI<<" -> "<<DirFREIPRO<<"% ("<<FileSystemNameBuffer<<")\n";
    							}
    							else if(::GetDriveType(adr1) == DRIVE_RAMDISK)
    							{
    							cout<<"("<<drv<<":) RamDisk: "<<DirGESAMMT<<" "<<DirFREI<<" -> "<<DirFREIPRO<<"% ("<<FileSystemNameBuffer<<")\n";
    							}
    							else
    							{
    							cout<<"("<<drv<<":) "<<DirGESAMMT<<" "<<DirFREI<<" -> "<<DirFREIPRO<<"% ("<<FileSystemNameBuffer<<")\n";
    							}
    					}
    				}
    				if ((int)Int64ShrlMod32(TotalNumberOfFreeBytes.QuadPart,20)==0)//wenn der freiespeicher 0 bytes sind -> CD-Laufwerk + Ermittlung des Gesammtspeichers + (eventuell) Laufwerksnamen
    				{
    					sprintf(DirGESAMMT," (Belegt:) %iMB",Int64ShrlMod32(TotalNumberOfBytes.QuadPart,20));
    
    					if(VolumeNameBuffer){cout<<"("<<drv<<":) CD-Eingelegt"<<DirGESAMMT<<"\n";}					else{cout<<"("<<drv<<":) CD-Eingelegt"<<DirGESAMMT<<" (CD-Name): "<<VolumeNameBuffer<<"\n";}
    				}
    			}
    
    		}
    }
    

    Viel Spass



  • schreibt man "gesammt" wirklich so? Früher war das doch mal "gesamt"?


Anmelden zum Antworten