ローカル ディスク (C:) の使用領域と空き領域の表示

ActiveBasicでのプログラミングでわからないこと、困ったことなどがあったら、ここで質問してみましょう(質問を行う場合は、過去ログやWeb上であらかじめ問題を整理するようにしましょう☆)。
返信する
メッセージ
作成者
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

ローカル ディスク (C:) の使用領域と空き領域の表示

#1 投稿記事 by M.S. »

ローカル ディスクの使用領域と空き領域をスタティック テキストに表示させたいのですが、どのようにコーディングすればよいのでしょうか?
教えて下さい。

使用領域を表示させるスタティックの ID : Static_Used

空き領域を表示させるスタティックの ID : Static_Empty
まけイヌ
記事: 27
登録日時: 2005年7月03日(日) 10:37
お住まい: 愛知県岡崎市
連絡する:

Re: ローカル ディスク (C:) の使用領域と空き領域の表示

#2 投稿記事 by まけイヌ »

> ローカル ディスクの使用領域と空き領域をスタティック テキストに表示させたいのですが、どのようにコーディングすればよいのでしょうか?
> 教えて下さい。
>
> 使用領域を表示させるスタティックの 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だけではメインウィンドウのハンドルが不明なため、
サンプルすら書けませんので。
# まけイヌ (losedog2)
# Home : http://www50.tok2.com/home/losedog2/
# Mail : losedog2@yahoo.co.jp
イグトランス
記事: 899
登録日時: 2005年5月31日(火) 17:59
お住まい: 東京都
連絡する:

#3 投稿記事 by イグトランス »

ちなみに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
M.S.
記事: 212
登録日時: 2005年6月01日(水) 21:51
お住まい: 奈良県北西部

ローカル ディスク (C:) の使用領域と空き領域の表示

#4 投稿記事 by M.S. »

まけイヌさんイグトランスさん、ありがとうございました。

まけイヌさんが教えて下さったコードを Project Editor にコピペして「SetWindowText」を使用して表示できるようにしてからコンパイルすると、「Print」と「Input」が「無効な識別子です」とエラーが出たので削除しました。

そしてもうひとつ聞きたいことがあるのですが、まけイヌさんのコードだと数字だけ表示されて単位が表示されないので、単位と表示させるにはどうすればよいのですか?


ウィンドウ ハンドル : hMainWnd

使用領域を表示させるスタティックの ID : Static_Used

空き領域を表示させるスタティックの ID : Static_Empty
まけイヌ
記事: 27
登録日時: 2005年7月03日(日) 10:37
お住まい: 愛知県岡崎市
連絡する:

Re: ローカル ディスク (C:) の使用領域と空き領域の表示

#5 投稿記事 by まけイヌ »

> イグトランス様
そんな便利な関数があったんですねぇ..
shell32、kernel32、comdlg32くらいしか弄らないので、
全く知りませんでした。
参考になります。

> まけイヌさんが教えて下さったコードを Project Editor にコピペして「SetWindowText」を使用して表示できるようにしてからコンパイルすると、「Print」と「Input」が「無効な識別子です」とエラーが出たので削除しました。
失礼!評価用コードです。
最初の方にある関数の部分だけコピーして、
最後の方にあるコードのように使ってください。
評価したい場合は、頭に#promptを付けて実行してみてください。

> そしてもうひとつ聞きたいことがあるのですが、まけイヌさんのコードだと数字だけ表示されて単位が表示されないので、単位と表示させるにはどうすればよいのですか?
言葉で説明して分かるかどうか不明ですが、
単純に文字で連結させるか、イグトランス様が説明しておられる
StrFormatByteSize64関数を使うと良いでしょう。

前者ならStr$(DriveSize) + "Bytes"でいけますし、
後者ならイグトランス様の書き込みのとおりです。
# まけイヌ (losedog2)
# Home : http://www50.tok2.com/home/losedog2/
# Mail : losedog2@yahoo.co.jp
ゲスト

Re: ローカル ディスク (C:) の使用領域と空き領域の表示

#6 投稿記事 by ゲスト »

まけイヌ様ありがとうございました。
単位の表示に成功しました。
返信する