static HINSTANCE kernelHandle;
bool (WINAPI *pGetDiskFreeSpaceEx)(LPCTSTR , ULARGE_INTEGER *,ULARGE_INTEGER *,
ULARGE_INTEGER *);
//GetDiskFreeSpaceExのアドレスを取得する関数
int ModuleLoads()
{
kernelHandle = LoadLibraryEx("KERNEL32.DLL", NULL, 0);
if(kernelHandle == NULL){
return(1);
}else{
pGetDiskFreeSpaceEx =
(bool (WINAPI *)(LPCTSTR ,
PULARGE_INTEGER, PULARGE_INTEGER, PULARGE_INTEGER))
GetProcAddress(kernelHandle, "GetDiskFreeSpaceExA");
if( pGetDiskFreeSpaceEx == NULL ){
FreeLibrary( kernelHandle );
kernelHandle = NULL;
return(1);
}
}
return(0);
}
void __fastcall TForm1::Button1Click(TObject *Sender)
{
//64Bit UNSIGNED INTEGER
ULARGE_INTEGER UserFree;
ULARGE_INTEGER DiskTotal;
ULARGE_INTEGER DiskFree;
//GetDiskFreeSpaceExをロードする
if( ModuleLoads() ){
ShowMessage( "Error ModuleLoads" );
return;
}
if( pGetDiskFreeSpaceEx ){
//ディスク容量を取得する
pGetDiskFreeSpaceEx( "C:\\", &UserFree, &DiskTotal, &DiskFree );
ShowMessage( Format("利用可能容量は%.2fGBです。",ARRAYOFCONST((
(((UserFree.QuadPart/1024.0)/1024.0)/1024.0)))) );
}
if( kernelHandle ) FreeLibrary( kernelHandle );
}
|
|
・インターネット上の情報や書籍の内容を一部参考に作成してます。 ・コーディング内容は著作権フリーですが、使用する場合は自己責任にてお願いします。 ・記述内容に問題点や改善点がありましたらこちらまでお願いします。 |