ローカル ディスクの使用領域と空き領域をスタティック テキストに表示させたいのですが、どのようにコーディングすればよいのでしょうか?
教えて下さい。
使用領域を表示させるスタティックの ID : Static_Used
空き領域を表示させるスタティックの ID : Static_Empty
ローカル ディスク (C:) の使用領域と空き領域の表示
Re: ローカル ディスク (C:) の使用領域と空き領域の表示
> ローカル ディスクの使用領域と空き領域をスタティック テキストに表示させたいのですが、どのようにコーディングすればよいのでしょうか?
> 教えて下さい。
>
> 使用領域を表示させるスタティックの ID : Static_Used
>
> 空き領域を表示させるスタティックの ID : Static_Empty
そのまんまのAPIがあります。
その名もGetDiskFreeSpaceEx関数(API)です。
使い方は以下のとおり。
後はこれを参考にスタティックウィンドウに表示させてみてください。
情報がコントロールIDだけではメインウィンドウのハンドルが不明なため、
サンプルすら書けませんので。
> 教えて下さい。
>
> 使用領域を表示させるスタティックの ID : Static_Used
>
> 空き領域を表示させるスタティックの ID : Static_Empty
そのまんまのAPIがあります。
その名もGetDiskFreeSpaceEx関数(API)です。
使い方は以下のとおり。
コード: 全て選択
'■ディスクの空き容量を取得
Function GetDiskFree( ByVal lpDriveName As BytePtr) As QWord
Dim ds1 As ULARGE_INTEGER
Dim ds2 As ULARGE_INTEGER
Dim ds3 As ULARGE_INTEGER
Select Case GetDiskFreeSpaceEx( lpDriveName, ds1, ds2, ds3)
Case TRUE:
GetDiskFree = (ds3.HighPart * &H100000000) + ds3.LowPart
Case FALSE:
GetDiskFree = -1
End Select
End Function
'■ディスクの総容量を取得
Function GetFullDisk( ByVal lpDriveName As BytePtr) As QWord
Dim ds1 As ULARGE_INTEGER
Dim ds2 As ULARGE_INTEGER
Dim ds3 As ULARGE_INTEGER
Select Case GetDiskFreeSpaceEx( lpDriveName, ds1, ds2, ds3)
Case TRUE:
GetFullDisk = (ds2.HighPart * &H100000000) + ds2.LowPart
Case FALSE:
GetFullDisk = -1
End Select
End Function
'■ディスクの使用容量を取得
Function GetDiskUse( ByVal lpDriveName As BytePtr) As QWord
Dim fs As QWord
Dim us As QWord
GetDiskUse = -1
fs = GetDiskFree(lpDriveName)
If fs < 0 Then Exit Function
us = GetFullDisk(lpDriveName)
If us < 0 Then Exit Function
GetDiskUse = us - fs
End Function
Dim s As String '■表示文字列
Dim d As String '■ドライブ名
d = "C:"
s = "空き容量 = " + Str$(GetDiskFree(d))
s = s + Ex"\r\n使用容量 = " + Str$(GetDiskUse(d))
Print s
Input s
End
情報がコントロールIDだけではメインウィンドウのハンドルが不明なため、
サンプルすら書けませんので。
ちなみにSHLWAPI.DLLにはStrFormatByteSize64というMBやGBなどの適切な単位を付けた文字列へ変換する関数があります。
たとえばこういう風に使います。
たとえばこういう風に使います。
コード: 全て選択
Declare Function StrFormatByteSize64 Lib "shlwapi" Alias "StrFormatByteSize64A" (ll As Int64, pszBuf As BytePtr, uiBufSize As DWord) As BytePtr
Dim szBuf[256] As Byte, dValue As Double, qwValue As QWord
Do
Input dValue
qwValue = dValue
If StrFormatByteSize64(qwValue, szBuf, Len(szBuf)) Then
Print MakeStr(szBuf)
Else
Print "変換失敗"
End If
Loop
ローカル ディスク (C:) の使用領域と空き領域の表示
まけイヌさんイグトランスさん、ありがとうございました。
まけイヌさんが教えて下さったコードを Project Editor にコピペして「SetWindowText」を使用して表示できるようにしてからコンパイルすると、「Print」と「Input」が「無効な識別子です」とエラーが出たので削除しました。
そしてもうひとつ聞きたいことがあるのですが、まけイヌさんのコードだと数字だけ表示されて単位が表示されないので、単位と表示させるにはどうすればよいのですか?
ウィンドウ ハンドル : hMainWnd
使用領域を表示させるスタティックの ID : Static_Used
空き領域を表示させるスタティックの ID : Static_Empty
まけイヌさんが教えて下さったコードを Project Editor にコピペして「SetWindowText」を使用して表示できるようにしてからコンパイルすると、「Print」と「Input」が「無効な識別子です」とエラーが出たので削除しました。
そしてもうひとつ聞きたいことがあるのですが、まけイヌさんのコードだと数字だけ表示されて単位が表示されないので、単位と表示させるにはどうすればよいのですか?
ウィンドウ ハンドル : hMainWnd
使用領域を表示させるスタティックの ID : Static_Used
空き領域を表示させるスタティックの ID : Static_Empty
Re: ローカル ディスク (C:) の使用領域と空き領域の表示
> イグトランス様
そんな便利な関数があったんですねぇ..
shell32、kernel32、comdlg32くらいしか弄らないので、
全く知りませんでした。
参考になります。
> まけイヌさんが教えて下さったコードを Project Editor にコピペして「SetWindowText」を使用して表示できるようにしてからコンパイルすると、「Print」と「Input」が「無効な識別子です」とエラーが出たので削除しました。
失礼!評価用コードです。
最初の方にある関数の部分だけコピーして、
最後の方にあるコードのように使ってください。
評価したい場合は、頭に#promptを付けて実行してみてください。
> そしてもうひとつ聞きたいことがあるのですが、まけイヌさんのコードだと数字だけ表示されて単位が表示されないので、単位と表示させるにはどうすればよいのですか?
言葉で説明して分かるかどうか不明ですが、
単純に文字で連結させるか、イグトランス様が説明しておられる
StrFormatByteSize64関数を使うと良いでしょう。
前者ならStr$(DriveSize) + "Bytes"でいけますし、
後者ならイグトランス様の書き込みのとおりです。
そんな便利な関数があったんですねぇ..
shell32、kernel32、comdlg32くらいしか弄らないので、
全く知りませんでした。
参考になります。
> まけイヌさんが教えて下さったコードを Project Editor にコピペして「SetWindowText」を使用して表示できるようにしてからコンパイルすると、「Print」と「Input」が「無効な識別子です」とエラーが出たので削除しました。
失礼!評価用コードです。
最初の方にある関数の部分だけコピーして、
最後の方にあるコードのように使ってください。
評価したい場合は、頭に#promptを付けて実行してみてください。
> そしてもうひとつ聞きたいことがあるのですが、まけイヌさんのコードだと数字だけ表示されて単位が表示されないので、単位と表示させるにはどうすればよいのですか?
言葉で説明して分かるかどうか不明ですが、
単純に文字で連結させるか、イグトランス様が説明しておられる
StrFormatByteSize64関数を使うと良いでしょう。
前者ならStr$(DriveSize) + "Bytes"でいけますし、
後者ならイグトランス様の書き込みのとおりです。