Programming Windows Maniacs - プログラミング ウィンドウズ マニアックス ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて  
ホーム >> シェル >> ドライブをフォーマットするには

ドライブをフォーマットするには

  SHFormatDrive () APIでドライブをフォーマットできるのですが、このAPIはMSDN Libraryに公開されていません。
  しかし、shell32.DLLにありますので、shell32.libをリンクもしくはLoadLibrary () すれば使用できます。

  SHFormatDrive () API の定義は下記の通りです。

  DWORD WINAPI SHFormatDrive ( HWND hWnd /* 親ウィンドウハンドル */,
      DWORD dwDrive /* ドライブナンバー。0でAドライブ、1でBドライブ・・・ */,
      DWORD dwFormatID /* SHFMT_ID_DEFAULT で固定 */,
      DWORD dwOptions /* オプションを指定します */ );

  hWnd : 親ウィンドウハンドルを指定します。

  dwDrive : ドライブナンバーを指定します。0でAドライブ、1でBドライブ、2でCドライブ・・・となります。

  dwFormatID : SHFMT_ID_DEFAULT (0xFFFF)で固定です。

  dwOptions : オプションを下記の組み合わせで指定します。
      SHFMT_OPT_FULL (0x0001) : このフラグを指定しないとクイックフォーマットになります。
      SHFMT_OPT_SYSONLY (0x0002) : 起動ディスクを既定値にします。

  戻り値は下記のいずれかになります。
      SHFMT_ERROR (0xFFFFFFFF) : エラーが発生しました(何もせずに閉じた場合もこれになります)。
      SHFMT_CANCEL (0xFFFFFFFE) : 処理を途中でキャンセルしました。
      SHFMT_NOFORMAT (0xFFFFFFFD) : このドライブはフォーマットできません。

  以下、サンプルになります。

■■■ format プロジェクト
■ main.cpp


#include <windows.h>
#include <tchar.h>

#include <string>

//-------------------------------------------------------------------------------------
// SHFormatDrive 用 定義
//-------------------------------------------------------------------------------------
extern "C" DWORD WINAPI SHFormatDrive ( HWND hWnd,
    DWORD dwDrive,
    DWORD dwFormatID,
    DWORD dwOptions );

#define SHFMT_ID_DEFAULT 0xFFFF

#define SHFMT_OPT_FULL 0x0001
#define SHFMT_OPT_SYSONLY 0x0002

#define SHFMT_ERROR 0xFFFFFFFFL
#define SHFMT_CANCEL 0xFFFFFFFEL
#define SHFMT_NOFORMAT 0xFFFFFFFDL
//-------------------------------------------------------------------------------------

// エントリポイント
int WINAPI _tWinMain ( HINSTANCE,
    HINSTANCE,
    _TCHAR *,
    int )
{
    UINT nResult;
    nResult = SHFormatDrive ( NULL,
        3 /* D ドライブ */,
        SHFMT_ID_DEFAULT,
        SHFMT_OPT_FULL );
    // 結果
    std::basic_string < _TCHAR > strResult;
    switch ( nResult ) {
    case SHFMT_ERROR:
        strResult = _TEXT ( "エラー(何もせずに閉じた場合も)" );
        break;
    case SHFMT_CANCEL:
        strResult = _TEXT ( "処理をキャンセルしました" );
        break;
    case SHFMT_NOFORMAT:
        strResult = _TEXT ( "このドライブはフォーマットできません" );
        break;
    default:
        strResult = _TEXT ( "未定義のエラー" );
    }

    MessageBox ( NULL,
        strResult.c_str (),
        _TEXT ( "確認" ),
        MB_OK );

    return 0;
}

  ■ ご利用に際して ■ 更新履歴 ■ お問い合わせ ■ このホームページについて Copyright © 2014 A.Morita