投稿時間:2005/07/29(Fri) 02:10 投稿者名:Starfish
Eメール:
URL :
タイトル:FMIFS.DLL の FormatEx API
フォームに、コマンドボタンとラベルを貼り付けて
========== ここから、フォームモジュール ================ Private Sub Command1_Click() Dim bytDrive() As Byte Dim bytFS() As Byte Dim bytLabel() As Byte
' パラメータの文字列をバイト配列に bytDrive = "A:\" & Chr(0) ' ドライブ bytFS = "FAT" & Chr(0) ' ファイルシステムフォーマット bytLabel = "TEST" & Chr(0) ' ラベル ' 表示をクリア Label1.Caption = ""
Call FormatEx(bytDrive(0), _ FMIFS_FLOPPY, _ bytFS(0), _ bytLabel(0), _ API_FALSE, _ FMIFS_SizeDefault, _ AddressOf FormatexCallBack) If gbytResult = 1 Then MsgBox "フォーマットが完了しました。" Else MsgBox "フォーマットが失敗しました。" End If End Sub
========== ここから、標準モジュール ================ Option Explicit ' ディスク/ディスケットのフォーマットを行う関数 Public Declare Function FormatEx Lib "FMIFS.DLL" _ (DriveRoot As Any, _ ByVal MediaFlag As Long, _ Format As Any, _ Label As Any, _ ByVal QuickFormat As Long, _ ByVal ClusterSize As Long, _ ByVal Callback As Long) As Long
' MediaFlag Public Const FMIFS_HARDDISK = &HC Public Const FMIFS_FLOPPY = &H8
' ClusterSize Public Const FMIFS_SizeDefault = 0 Public Const FMIFS_Size512 = 512 Public Const FMIFS_Size1K = 1024 Public Const FMIFS_Size2K = 2048 Public Const FMIFS_Size4K = 4096 Public Const FMIFS_Size8K = 8192 Public Const FMIFS_Size16K = 16384 Public Const FMIFS_Size32K = 32768 Public Const FMIFS_Size64K = 65536 Public Const FMIFS_Size128K = 131072 Public Const FMIFS_Size256K = 262144
' Command Public Const FMIFS_Progress = 0 Public Const FMIFS_DoneWithStructure = 1 Public Const FMIFS_InsufficientRights = 6 Public Const FMIFS_WriteProtected = 7 Public Const FMIFS_Done = 11 Public Const FMIFS_OutPut = 14 Public Const FMIFS_StructureProgress = 15
' メモリーコピー関数 Public Declare Sub CopyMemory Lib "kernel32" Alias "RtlMoveMemory" _ (Destination As Any, _ Source As Any, _ ByVal Length As Long)
' C言語の、True/False Public Const API_TRUE = 1 ' VBの True は、-1 Public Const API_FALSE = 0 ' VBの False は、0
' フォーマットの結果 Public gbytResult As Byte
Public Function FormatexCallBack(ByVal lngCommand As Long, ByVal lngSubAction As Long, ByVal ActionInfo As Long) As Long Dim lngInfo As Long Dim bytMessage(256) As Byte
' Command により分岐 Debug.Print lngCommand, lngSubAction, ActionInfo Select Case lngCommand ' 処理中 Case FMIFS_Progress Call CopyMemory(lngInfo, ByVal ActionInfo, 4) Form1.Label1.Caption = CStr(lngInfo) & " パーセント終了しました。" Form1.Label1.Refresh Case FMIFS_DoneWithStructure ' FAT初期化完了? Form1.Label1.Caption = "フォーマットは完了しました。" Form1.Label1.Refresh Case FMIFS_InsufficientRights ' ? Case FMIFS_WriteProtected ' 書込み禁止 Form1.Label1.Caption = "フォーマットできません。このボリュームは書込み禁止です。" Form1.Label1.Refresh Case FMIFS_Done ' 完了 ' 終了 Call CopyMemory(gbytResult, ByVal ActionInfo, 1) Case FMIFS_OutPut ' メッセージ出力 ' ActionInfo にメッセージがセットされるようですが、発生しないのでとりあえずスキッ プ。 Case FMIFS_StructureProgress ' FAT初期化中? Form1.Label1.Caption = "ファイル アロケーション テーブル(FAT)を初期化していま す。" Form1.Label1.Refresh End Select FormatexCallBack = API_TRUE
End Function
|