.NET TIPS ドライブをフォーマットするためのダイアログを表示するには?デジタルアドバンテージ 一色 政彦2005/07/29 |
|
|
Windows OSには、フロッピー・ディスクやハード・ディスクなどのドライブ(CD-RWドライブなどは含まない)をフォーマットするための機能と、それを操作するためのダイアログ(以降、フォーマット・ダイアログ)が用意されている。本稿では、.NETでこのダイアログを呼び出すための方法を紹介する。
フォーマット・ダイアログを表示する機能はWin32 APIとしては用意されているが、.NET Frameworkのクラス・ライブラリには含まれていない。そのため、.NETのプログラムからWin32 APIを呼び出す必要がある(なお.NETでWin32 APIを利用する方法については、「TIPS:Win32 APIやDLL関数を呼び出すには?」を参照されたい)。具体的には、「SHFormatDrive」というWin32 APIを呼び出す。
このWin32 APIを呼び出すためにC#やVB.NETで必要となる宣言定義は次のとおりだ。
|
||
フォーマット・ダイアログを表示するWin32 API「SHFormatDrive」の宣言(上:C#、下:VB.NET) | ||
厳密には、C#のサンプル・コードでuint型になっている個所は、VB.NETではUInt32型にするのが好ましい。しかしそうした場合、VB.NETではUInt32型変数に数値を代入するときに、Convert.ToUInt32メソッドなどを使ってデータ型を変換しなければならないので、コード量が増える。本稿の例では、同じ32bits整数型のInteger(Int32型)でも問題ないため、ここではInteger型で代用している。 |
SHFormatDrive関数のパラメータと戻り値の意味については、次の表にまとめた。
項目 | 説明 |
hwnd(第1パラメータ) | Windowsフォームのハンドルを指定する。Windowsフォームのハンドルは、フォームのHandleプロパティにより取得できる。もしフォーマット・ダイアログのオーナーとなるフォームを設定しない場合には、null(C#)/Nothing(VB.NET)を指定すればよい |
drive(第2パラメータ) | フォーマットするドライブの番号。Aドライブが「0」番で、以降、Bドライブ=「1」、Cドライブ=「2」というように順番に番号が割り当てられている |
fmtID(第3パラメータ) | フォーマットIDは物理フォーマットの識別子を指定するが、ここには常に「SHFMT_ID_DEFAULT」(デフォルトのフォーマットID。C#では「0xFFFF」、VB.NETでは「&HFFFF」という数値と同等)を指定すればよい |
options(第4パラメータ) | フォーマットのオプション。次のようなオプション値があるが、デフォルトのままでよい場合は「0」を指定しておけばよい。 ・SHFMT_OPT_NORMAL:通常フォーマットのオプション → NT系では「0x0000(C#)/&H0(VB.NET)」 → 9x系では「0x0001/&H1」 ・SHFMT_OPT_QUICK:クイック・フォーマット → NT系では「0x0001/&H1」 → 9x系では「0x0000/&H0」 ・SHFMT_OPT_SYSONLY:起動ディスク作成用 → NT系では利用不可(のようだ) → 9x系では「0x0002/&H2」 なおこれらのオプションは、OSによって、特にWindows NT系かWindows 9x系かによって数値が変わるので注意すること。特にWindows NT 4.0などではオプション指定自体が無視される |
戻り値 | 最後に成功したフォーマットのフォーマットID。もしくは、失敗した場合には、 ・「SHFMT_ERROR」 =「0xFFFFFFFF(C#)/&HFFFFFFFF(VB.NET)」 ・「SHFMT_CANCEL」 =「0xFFFFFFFE(C#)/&HFFFFFFFE(VB.NET)」 ・「SHFMT_NOFORMAT」 =「0xFFFFFFFD(C#)/&HFFFFFFFD(VB.NET)」 のいずれかの値になる。これらの値を受け取った場合、それはドライブがフォーマットされていないことを意味する |
SHFormatDrive関数のパラメータと戻り値の意味 |
以上が理解できたら、このAPIを呼び出すサンプル・プログラムのソース・コードを見てみよう。
|
||
フォーマット・ダイアログを表示するサンプル・プログラム(上:C#、下:VB.NET) |
特に難しいところはないだろう。なおOS種別の判定については、「TIPS:Windows OSの種類やバージョンを判別するには?」を参照してほしい。
それではこのプログラムを実行してみよう。
サンプル・プログラムの実行結果 |
[フォーマット・ダイアログを表示する]ボタンをクリックすると、このようなダイアログが表示される。 |
実行すると、このようなフォーマット・ダイアログが表示されるはずだ。このフォーマット・ダイアログは、エクスプローラなどで表示されるドライブの上で右クリックして、そこで現れるコンテキスト・メニューから[プロパティ]を選択したときに表示されるダイアログとまったく同じものだ。
カテゴリ:Windowsフォーム 処理対象:ダイアログ 関連TIPS:Win32 APIやDLL関数を呼び出すには? 関連TIPS:Windows OSの種類やバージョンを判別するには? |
|
「.NET TIPS」 |
Insider.NET フォーラム 新着記事
- 第2回 簡潔なコーディングのために (2017/7/26)
ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている - 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう - 第1回 明瞭なコーディングのために (2017/7/19)
C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える - Presentation Translator (2017/7/18)
Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
|
|