C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[1]: USBメモリのシリアル番号を取得したい


(過去ログ 94 を表示中)

[トピック内 2 記事 (1 - 2 表示)]  << 0 >>

■55951 / inTopicNo.1)  USBメモリのシリアル番号を取得したい
  
□投稿者/ kaze (17回)-(2010/12/20(Mon) 13:21:03)

分類:[C#] 

2010/12/20(Mon) 13:23:50 編集(投稿者)
お世話になります。
OS:Windows XP
環境:VisualStudio2010
使用言語:C#
.NET:4.0

C#にてWMIを使用してUSBメモリのシリアル番号を取得したいと思い、下記URLを参考に作ってみたのですが、取得に失敗してしまいます。
http://blogs.yahoo.co.jp/kinuyo_asami/16010191.html
VBにコピペしてみたところ動作しましたので、権限等の問題では無いと思われます。

エラー時のクエリは、以下のようになっています。
QueryString = "ASSOCIATORS OF {Win32_DiskPartition.DeviceID='Disk #3, Partition #0'} WHERE AssocClass = Win32_LogicalDiskToPartition"

クエリの記述やパラメータの使い方に何か問題でもあるのでしょうか?
よろしくお願いします。


using System.Management;            // 参照の追加も必要

        private void button1_Click(object sender, EventArgs e)
        {
            label1.Text = USB_SerialGet("G:");
        }

        private string USB_SerialGet(string strDriveLetter)
        {
            ManagementObjectCollection mocDiskDrives;
            ManagementObjectCollection mocLogicalDisks;
            ManagementObjectCollection mocPartitions;

            string strDriveDeviceID;
            string strPartitionDeviceID;
            string strLogicalDeviceID;
            string strPNPDeviceID;

            using (ManagementObjectSearcher mojWMISeacher = new ManagementObjectSearcher(
                        "root\\CIMV2", "SELECT * FROM Win32_DiskDrive Where InterfaceType=\'USB\'"))    // USBドライブから検索
//                        "root\\CIMV2", "SELECT * FROM Win32_DiskDrive"))                              // 全てのドライブから検索
            {
                mocDiskDrives = mojWMISeacher.Get();
                foreach (ManagementObject mojDrive in mocDiskDrives)
                {
                    strDriveDeviceID = mojDrive.GetPropertyValue("DeviceID").ToString();    // 実行時、"\\\\.\\PHYSICALDRIVE3" が入る
                    //strDriveDeviceID = strDriveDeviceID.Replace(@"\\",@"\");              // Replaceが必要?

                    mojWMISeacher.Query.QueryString =
                            "ASSOCIATORS OF {Win32_DiskDrive.DeviceID=\'" +
                            strDriveDeviceID + "\'} WHERE AssocClass = " +
                                "Win32_DiskDriveToDiskPartition";
                    mocPartitions = mojWMISeacher.Get();

                    if (mocPartitions.Count == 0) continue;
                    foreach (ManagementObject mojPartition in mocPartitions)
                    {
                        strPartitionDeviceID = mojPartition.GetPropertyValue("DeviceID").ToString();     
                        mojWMISeacher.Query.QueryString =
                            "ASSOCIATORS OF {Win32_DiskPartition.DeviceID=\'" +
                                  strPartitionDeviceID + "\'} WHERE AssocClass = " +
                                        "Win32_LogicalDiskToPartition";

                        mocLogicalDisks = mojWMISeacher.Get();                              // ←ここで失敗している
                        if (mocLogicalDisks.Count == 0) continue;
                        foreach (ManagementObject mojLogicakDisk in mocLogicalDisks)
                        {
                            strLogicalDeviceID = mojLogicakDisk.GetPropertyValue("DevieID").ToString();
                            strPNPDeviceID = mojDrive.GetPropertyValue("PNPDeviceID").ToString();

                            // 確認用
                            MessageBox.Show("Disk:" + strLogicalDeviceID + "---" + strPNPDeviceID);

                            if (strLogicalDeviceID == strDriveLetter)
                            {
                                int iYen = strPNPDeviceID.LastIndexOf('\\');
                                return strPNPDeviceID.Substring(iYen);
                            }
                        }
                    }
                }
            }
            return string.Empty;
        }
    }

引用返信 編集キー/
■55952 / inTopicNo.2)  Re[1]: USBメモリのシリアル番号を取得したい
□投稿者/ kaze (18回)-(2010/12/20(Mon) 13:30:34)
ただのスペルミスでした。
大変申し訳ありませんでした。
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -