private   string[]   GetMoc()   
  {   
  string[]   str   =   new   string[2];   
  ManagementClass   mcCpu   =   new   ManagementClass("win32_Processor");   
  ManagementObjectCollection   mocCpu   =   mcCpu.GetInstances();   
  foreach(ManagementObject   m   in   mocCpu)   
  {   
  str[0]   =   m["ProcessorId"].ToString();   
  }   
    
  ManagementClass   mcHD   =   new   ManagementClass("win32_logicaldisk");   
  ManagementObjectCollection   mocHD   =   mcHD.GetInstances();   
  foreach(ManagementObject   m   in   mocHD)   
  {   
  if(m["DeviceID"].ToString()   ==   "C:")   
  {   
  str[1]   =   m["VolumeSerialNumber"].ToString();   
  break;   
  }   
  }   
  return   str;   
  }
ManagementClass命名空间是System.Management
以上代码用于获取C盘的序列号,而不是硬盘的固有序号.
获取硬盘的固有序号:
using System; 
using System.Runtime.InteropServices; namespace ArLi.CommonPrj { #region how use this? 
/* 
string sVol = getvol.GetVolOf("C"); 
*/ 
#endregion public class getvol{ [DllImport("kernel32.dll")] 
private static extern int GetVolumeInformation( 
string lpRootPathName, 
string lpVolumeNameBuffer, 
int nVolumeNameSize, 
ref int lpVolumeSerialNumber, 
int lpMaximumComponentLength, 
int lpFileSystemFlags, 
string lpFileSystemNameBuffer, 
int nFileSystemNameSize 
); public static string GetVolOf(string drvID){ 
const int MAX_FILENAME_LEN = 256; 
int retVal = 0; 
int a =0; 
int b =0; 
string str1 = null; 
string str2 = null; 
int i = GetVolumeInformation( 
drvID + @":/", 
str1, 
MAX_FILENAME_LEN, 
ref retVal, 
a, 
b, 
str2, 
MAX_FILENAME_LEN 
); return retVal.ToString("x"); 


}
 
 

解决方案 »

  1.   


    我的程序是放在移动硬盘上的,如果我想获得移动硬盘的SID号怎么弄?因为这个时候有电脑的磁盘和移动硬盘两个磁盘的数据。
      

  2.   

    我不是获得磁盘里某个分区的信息,而是想获得整个移动硬盘的SID号。
      

  3.   

    给个思路啊,C#不是可以取到当前程序所在的路径吗?
    如:获取和设置当前目录的完全限定路径。
    string str = System.Environment.CurrentDirectory;然后根据这个与我上面贴出来的代码获取到的所有信息比较,得到当前磁盘的信息