ab.com コミュニティ

ActiveBasicを通したコミュニケーション
現在時刻 - 2024年4月27日(土) 14:58

全ての表示時間は UTC+09:00 です




新しいトピックを投稿する  トピックへ返信する  [ 6 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2005年7月19日(火) 21:44 
オフライン

登録日時: 2005年6月01日(水) 21:51
記事: 212
お住まい: 奈良県北西部
ローカル ディスクの使用領域と空き領域をスタティック テキストに表示させたいのですが、どのようにコーディングすればよいのでしょうか?
教えて下さい。

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

空き領域を表示させるスタティックの ID : Static_Empty


通報する
ページトップ
投稿記事Posted: 2005年7月19日(火) 22:16 
オフライン

登録日時: 2005年7月03日(日) 10:37
記事: 27
お住まい: 愛知県岡崎市
> ローカル ディスクの使用領域と空き領域をスタティック テキストに表示させたいのですが、どのようにコーディングすればよいのでしょうか?
> 教えて下さい。
>
> 使用領域を表示させるスタティックの 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


通報する
ページトップ
 記事の件名:
投稿記事Posted: 2005年7月19日(火) 23:31 
オフライン

登録日時: 2005年5月31日(火) 17:59
記事: 899
お住まい: 東京都
ちなみに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


通報する
ページトップ
投稿記事Posted: 2005年7月20日(水) 16:14 
オフライン

登録日時: 2005年6月01日(水) 21:51
記事: 212
お住まい: 奈良県北西部
まけイヌさんイグトランスさん、ありがとうございました。

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

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


ウィンドウ ハンドル : hMainWnd

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

空き領域を表示させるスタティックの ID : Static_Empty


通報する
ページトップ
投稿記事Posted: 2005年7月21日(木) 21:29 
オフライン

登録日時: 2005年7月03日(日) 10:37
記事: 27
お住まい: 愛知県岡崎市
> イグトランス様
そんな便利な関数があったんですねぇ..
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


通報する
ページトップ
投稿記事Posted: 2005年7月22日(金) 15:58 
まけイヌ様ありがとうございました。
単位の表示に成功しました。


通報する
ページトップ
   
期間内表示:  ソート  
新しいトピックを投稿する  トピックへ返信する  [ 6 件の記事 ] 

全ての表示時間は UTC+09:00 です


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[14人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by phpBB® Forum Software © phpBB Limited
Japanese translation principally by ocean