VB6.0用掲示板の過去のログ(No.2)−VBレスキュー(花ちゃん)
[記事リスト] [新規投稿] [新着記事] [ワード検索] [管理用]

投稿日: 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


- 関連一覧ツリー (★ をクリックするとツリー全体を一括表示します)

- 返信フォーム (この記事に返信する場合は下記フォームから投稿して下さい)

- VBレスキュー(花ちゃん) - - Web Forum -