[ C# ] ドライブフォーマットダイアログを出力する(SHFormatDrive関数)

Pocket

エクスプローラでドライブを選択し、右クリックメニューからフォーマットを選択するとダイアログが出力され、ドライブのフォーマットを行うことができます。

ここでは、C# からこのフォーマットダイアログを出力するサンプルコードを掲載しています。なお、具体的には SHFormatDrive 関数を使用しています。

スポンサーリンク


フォーマットダイアログを出力する

具体的にフォーマットダイアログを出力するサンプルコードは次の通りです。詳細はコメントを参照ください。

参考
//using System.Runtime.InteropServices;

// フォーマットダイアログ出力関数定義
[DllImport("shell32.dll")]
private static extern uint SHFormatDrive(IntPtr hwnd, int drive, int formatID, int options);

// フォーマットID(formatID)の定義
private const int SHFMT_ID_DEFAULT = 0xFFFF;

// フォーマットダイアログ出力関数のリターン値
private const uint SHFMT_ERROR = 0xFFFFFFFF;    // 最終フォーマットでエラー
private const uint SHFMT_CANCEL = 0xFFFFFFFE;   // 最終フォーマットでキャンセル
private const uint SHFMT_NOFORMAT = 0xFFFFFFFD; // フォーマットできなかった

private const int SHFMT_OPT_ZERO = 0x0000; // 通常フォーマット
private const int SHFMT_OPT_FULL = 0x0001; // クイックフォーマット

private void button1_Click(object sender, EventArgs e)
{
    // フォーマットするドライブ
    string driveLetter = "K:";

    // A ~ Z ドライブ(インデックス:0 ~ 25)定義
    string[] driveLetters = {
                "A:","B:", "C:", "D:", "E:", "F:", "G:", "H:", "I:", "J:", "K:", "L:", "M:",
                "N:","O:", "P:", "Q:", "R:", "S:", "T:", "U:", "V:", "W:", "X:", "Y:", "Z:",
    };

    // ドライブレターが配列内の要素と一致するインデックスを取得する
    int index = Array.IndexOf(driveLetters, driveLetter);
    if (index < 0)
    {
        MessageBox.Show("ドライブレターがおかしい。ワッハッハー");
        return;
    }

    /*
     * パラメータ設定
     */
    // SHFormatDrive のパラメータ(drive)は A ~ Zドライブ が 0 ~ 25 に対応する
    int drive = index;               // フォーマットドライブインデックス
    int options = SHFMT_OPT_FULL;    // クイックフォーマット

    // フォーマットダイアログを出力する
    uint result = SHFormatDrive(this.Handle, drive, SHFMT_ID_DEFAULT, options);
    if ((result == SHFMT_ERROR) || (result == SHFMT_CANCEL) || (result == SHFMT_NOFORMAT))
    {
        Console.WriteLine("エラーとかキャンセルとか");
    }
    else
    {
        Console.WriteLine("最終フォーマットはOK牧場");
    }
}

フォーマットダイアログを出力せずともドライブのフォーマットを行うこともできますが、個人的には、本ページで掲載したフォーマットダイアログを出力する方法が最も最適と考えています。

がしかし、フォーマットのダイアログを出力されたくない方は、次のリンクも御確認ください。

 

スポンサーリンク

Pocket

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>