VC++获取串口设备信息,CPU ID,硬盘ID,网卡MAC等机器硬件信息,用于加密

来源:互联网 发布:python iptools 编辑:程序博客网 时间:2024/05/14 16:22

VC++获取串口设备信息,CPU ID,硬盘ID,网卡MAC等机器硬件信息,用于加密

可以获取串口设备的详细信息,CPU ID,网卡MAC地址,硬盘的ID信息,以及系统安装时间,可以用来做计算机的唯一标识符。

首先要添加 System.Management 的引用

//详细的获取硬件信息的代码//获取串口设备信息public: int GetComHardwareInfo(array<String ^> ^ComBuff){int cnt = 0;int count;try {if ((ComBuff == nullptr) || (ComBuff->Length < 1)) return -1;System::Management::ManagementClass ^searcher = gcnew System::Management::ManagementClass("Win32_PnPEntity");//获取所有的硬件信息,因为如果只获取串口,可能会无法获取到虚拟串口或一些特殊的串口信息System::Management::ManagementObjectCollection ^hardInfos = searcher->GetInstances();if ((hardInfos != nullptr) && (hardInfos->Count > 0)){count = hardInfos->Count;if (count > 255) count = 255;//限制最大数量为255array<System::Management::ManagementBaseObject^ >^ BaseObjectBuff = gcnew array<System::Management::ManagementBaseObject^ >(count);hardInfos->CopyTo(BaseObjectBuff, 0);for (int i = 0; i < count; i++){try{if (BaseObjectBuff[i]->Properties["Name"]->Value->ToString()->Contains("COM"))//发现名称中含有COM则认为是串口{if (cnt >= ComBuff->Length) break;ComBuff[cnt++] = BaseObjectBuff[i]->Properties["Name"]->Value->ToString();}}catch (Exception^ e){}}return cnt;}return -1;}catch(Exception^ e){if (cnt > 0) return cnt;else return -1;}}//获取系统安装时间public: String ^GetInstallDate(void){String ^ StrInfo = "";int count;try{System::Management::ManagementClass ^searcher = gcnew System::Management::ManagementClass("Win32_OperatingSystem");System::Management::ManagementObjectCollection ^hardInfos = searcher->GetInstances();if ((hardInfos != nullptr) && (hardInfos->Count > 0)){count = hardInfos->Count;if (count > 10) count = 10;//限制最大数量为10array<System::Management::ManagementBaseObject^ >^ BaseObjectBuff = gcnew array<System::Management::ManagementBaseObject^ >(count);hardInfos->CopyTo(BaseObjectBuff, 0);StrInfo = BaseObjectBuff[0]->GetText(System::Management::TextFormat::Mof);return StrInfo->Substring(StrInfo->LastIndexOf("InstallDate") + 15, 14);}return " ";}catch (Exception ^e){return " ";}}//获取使用中的网卡MAC地址,会获取多个网卡的MAC地址,最大限制为128个//如果有一个网卡死机了,卡住了,特别是USB无线网卡卡住了,会导致程序死在 moc2->Count ,无法获取长度,也不产生异常,也不退出,目前没有办法解决(把无线网卡禁用,再恢复可解决)public: int GetNetworkCardId(array<String ^> ^MicBuff){int count;int cnt = 0;try{if ((MicBuff == nullptr) || (MicBuff->Length < 1)) return -1;System::Management::ManagementClass ^searcher = gcnew System::Management::ManagementClass("Win32_NetworkAdapterConfiguration");System::Management::ManagementObjectCollection ^hardInfos = searcher->GetInstances();if ((hardInfos != nullptr) && (hardInfos->Count > 0)){count = hardInfos->Count;if (count > 128) count = 128;//限制最大数量为128个网卡array<System::Management::ManagementBaseObject^ >^ BaseObjectBuff = gcnew array<System::Management::ManagementBaseObject^ >(count);hardInfos->CopyTo(BaseObjectBuff, 0);for (int i = 0; i < count; i++){if ((bool)BaseObjectBuff[i]["IPEnabled"] == true){if (cnt >= MicBuff->Length) break;MicBuff[cnt ++] = BaseObjectBuff[i]["MacAddress"]->ToString();}}return cnt;}return -1;}catch (Exception ^e){if (cnt > 0) return cnt;else return -1;}}//取CPU编号  public: int GetCpuID(array<String ^> ^CpuBuff){int count;int cnt = 0;try{if ((CpuBuff == nullptr) || (CpuBuff->Length < 1)) return -1;System::Management::ManagementClass ^searcher = gcnew System::Management::ManagementClass("Win32_Processor");System::Management::ManagementObjectCollection ^hardInfos = searcher->GetInstances();if ((hardInfos != nullptr) && (hardInfos->Count > 0)){count = hardInfos->Count;if (count > 128) count = 128;//限制最大数量为128个CPUarray<System::Management::ManagementBaseObject^ >^ BaseObjectBuff = gcnew array<System::Management::ManagementBaseObject^ >(count);hardInfos->CopyTo(BaseObjectBuff, 0);for (int i = 0; i < count; i++){if (cnt >= CpuBuff->Length) break;CpuBuff[cnt++] = BaseObjectBuff[i]->Properties["ProcessorId"]->Value->ToString();}return cnt;}return -1;}catch (Exception ^e){if (cnt > 0) return cnt;else return -1;}} //取硬盘编号 public: int GetHardDiskID(array<String ^> ^HardDiskBuff){int count;int cnt = 0;try{if ((HardDiskBuff == nullptr) || (HardDiskBuff->Length < 1)) return -1;System::Management::ManagementClass ^searcher = gcnew System::Management::ManagementClass("Win32_PhysicalMedia");System::Management::ManagementObjectCollection ^hardInfos = searcher->GetInstances();if ((hardInfos != nullptr) && (hardInfos->Count > 0)){count = hardInfos->Count;if (count > 128) count = 128;//限制最大数量为128个硬盘array<System::Management::ManagementBaseObject^ >^ BaseObjectBuff = gcnew array<System::Management::ManagementBaseObject^ >(count);hardInfos->CopyTo(BaseObjectBuff, 0);for (int i = 0; i < count; i++){if (cnt >= HardDiskBuff->Length) break;HardDiskBuff[cnt++] = BaseObjectBuff[i]->Properties["SerialNumber"]->Value->ToString()->Trim();;}return cnt;}return -1;}catch (Exception ^e){if (cnt > 0) return cnt;else return -1;}}


测试代码

//获取串口设备信息列表array<String ^> ^ComBuff = gcnew array<String ^>(100);int cnt = GetComHardwareInfo(ComBuff);if (cnt > 0){for (int i = 0; i < cnt; i++){this->textBox1->Text += ComBuff[i] + "\r\n";}}//获取系统安装时间UserGUID::User_GUID ^mUserGuid = gcnew UserGUID::User_GUID();String ^tim2 = this->GetInstallDate();//获取系统安装时间this->textBox1->Text +=  "\r\n系统安装时间\r\n";this->textBox1->Text += tim2 + "\r\n";//获取网卡信息array<String ^> ^MicBuff = gcnew array<String ^>(10);cnt = this->GetNetworkCardId(MicBuff);//获取网卡信息this->textBox1->Text += "\r\n网卡MAC\r\n";if (cnt > 0){for (int i = 0; i < cnt; i++){this->textBox1->Text += MicBuff[i] + "\r\n";}}//获取CPU信息array<String ^> ^CpuBuff = gcnew array<String ^>(10);cnt = this->GetCpuID(CpuBuff);//获取CPU信息this->textBox1->Text += "\r\nCPU ID\r\n";if (cnt > 0){for (int i = 0; i < cnt; i++){this->textBox1->Text += CpuBuff[i] + "\r\n";}}//获取硬盘信息array<String ^> ^HardDiskBuff = gcnew array<String ^>(10);cnt = this->GetHardDiskID(HardDiskBuff);//获取硬盘信息this->textBox1->Text += "\r\n硬盘ID\r\n";if (cnt > 0){for (int i = 0; i < cnt; i++){this->textBox1->Text += HardDiskBuff[i] + "\r\n";}}


运行的结果


1 0