如何在Windows7系统里面列举所有的驱动,并获得他们的信息呢?
微软的.net framework4.0提供了关于驱动访问的类,
如下图所示,创建一个CLR工程如下,
插入下列代码,详情键代码注释
#pragma once namespace yincheng { using namespace System; using namespace System::ComponentModel; using namespace System::Collections; using namespace System::Windows::Forms; using namespace System::Data; using namespace System::Drawing; /// <summary> /// Form1 摘要 /// /// 警告: 如果更改此类的名称,则需要更改 /// 与此类所依赖的所有 .resx 文件关联的托管资源编译器工具的 /// “资源文件名”属性。否则, /// 设计器将不能与此窗体的关联 /// 本地化资源正确交互。 /// </summary> public ref class Form1 : public System::Windows::Forms::Form { public: Form1(void) { InitializeComponent(); // //TODO: 在此处添加构造函数代码 // } protected: /// <summary> /// 清理所有正在使用的资源。 /// </summary> ~Form1() { if (components) { delete components; } } private: System::ServiceProcess::ServiceController^ serviceController1; private: System::Windows::Forms::Label^ label1; private: System::Windows::Forms::Button^ button1; private: System::Windows::Forms::ListView^ listView1; private: System::Windows::Forms::ColumnHeader^ columnHeader1; private: System::Windows::Forms::ColumnHeader^ columnHeader2; private: System::Windows::Forms::ColumnHeader^ columnHeader3; protected: private: /// <summary> /// 必需的设计器变量。 /// </summary> System::ComponentModel::Container ^components; #pragma region Windows Form Designer generated code /// <summary> /// 设计器支持所需的方法 - 不要 /// 使用代码编辑器修改此方法的内容。 /// </summary> void InitializeComponent(void) { this->serviceController1 = (gcnew System::ServiceProcess::ServiceController()); this->label1 = (gcnew System::Windows::Forms::Label()); this->button1 = (gcnew System::Windows::Forms::Button()); this->listView1 = (gcnew System::Windows::Forms::ListView()); this->columnHeader1 = (gcnew System::Windows::Forms::ColumnHeader()); this->columnHeader2 = (gcnew System::Windows::Forms::ColumnHeader()); this->columnHeader3 = (gcnew System::Windows::Forms::ColumnHeader()); this->SuspendLayout(); // // label1 // this->label1->AutoSize = true; this->label1->Location = System::Drawing::Point(2, 8); this->label1->Name = L"label1"; this->label1->Size = System::Drawing::Size(185, 12); this->label1->TabIndex = 0; this->label1->Text = L"当前系统驱动程序状态信息如下:"; // // button1 // this->button1->Location = System::Drawing::Point(257, 3); this->button1->Name = L"button1"; this->button1->Size = System::Drawing::Size(258, 23); this->button1->TabIndex = 1; this->button1->Text = L"获取当前windows7系统驱动程序状态信息"; this->button1->UseVisualStyleBackColor = true; this->button1->Click += gcnew System::EventHandler(this, &Form1::button1_Click); // // listView1 // this->listView1->Anchor = static_cast<System::Windows::Forms::AnchorStyles>((((System::Windows::Forms::AnchorStyles::Top | System::Windows::Forms::AnchorStyles::Bottom) | System::Windows::Forms::AnchorStyles::Left) | System::Windows::Forms::AnchorStyles::Right)); this->listView1->Columns->AddRange(gcnew cli::array< System::Windows::Forms::ColumnHeader^ >(3) {this->columnHeader1, this->columnHeader2, this->columnHeader3}); this->listView1->FullRowSelect = true; this->listView1->GridLines = true; this->listView1->Location = System::Drawing::Point(4, 28); this->listView1->Name = L"listView1"; this->listView1->Size = System::Drawing::Size(730, 309); this->listView1->TabIndex = 2; this->listView1->UseCompatibleStateImageBehavior = false; this->listView1->View = System::Windows::Forms::View::Details; // // columnHeader1 // this->columnHeader1->Text = L"驱动程序名称"; this->columnHeader1->Width = 214; // // columnHeader2 // this->columnHeader2->Text = L"驱动程序显示说明"; this->columnHeader2->Width = 282; // // columnHeader3 // this->columnHeader3->Text = L" 驱动程序状态"; this->columnHeader3->Width = 280; // // Form1 // this->AutoScaleDimensions = System::Drawing::SizeF(6, 12); this->AutoScaleMode = System::Windows::Forms::AutoScaleMode::Font; this->ClientSize = System::Drawing::Size(738, 340); this->Controls->Add(this->listView1); this->Controls->Add(this->button1); this->Controls->Add(this->label1); this->Name = L"Form1"; this->StartPosition = System::Windows::Forms::FormStartPosition::CenterScreen; this->Text = L"演示获取windows7系统驱动程序状态信息-CSDN著名技术专家尹成的杰作"; this->Load += gcnew System::EventHandler(this, &Form1::Form1_Load); this->ResumeLayout(false); this->PerformLayout(); } #pragma endregion //获取当前系统驱动程序状态信息 private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) { array<System::ServiceProcess::ServiceController^>^ MyServices; int i; array<String^>^ MyItems=gcnew array<String^>(3); System::ServiceProcess::ServiceController^ MyService; this->listView1->Items->Clear(); MyServices=this->serviceController1->GetDevices(); for(i=0;i<MyServices->Length;i++) { MyItems[0]=MyServices[i]->ServiceName; MyItems[1]=MyServices[i]->DisplayName; switch(MyServices[i]->Status) { case System::ServiceProcess::ServiceControllerStatus::ContinuePending: MyItems[2]="服务即将继续"; break; case System::ServiceProcess::ServiceControllerStatus::Paused: MyItems[2]="服务已暂停"; break; case System::ServiceProcess::ServiceControllerStatus::PausePending: MyItems[2]="服务即将暂停"; break; case System::ServiceProcess::ServiceControllerStatus::Running: MyItems[2]="服务正在运行"; break; case System::ServiceProcess::ServiceControllerStatus::StartPending: MyItems[2]="服务正在启动"; break; case System::ServiceProcess::ServiceControllerStatus::Stopped: MyItems[2]="服务未运行"; break; case System::ServiceProcess::ServiceControllerStatus::StopPending: MyItems[2]="服务正在停止"; break; } this->listView1->Items->Add(gcnew ListViewItem(MyItems)); } } private: System::Void Form1_Load(System::Object^ sender, System::EventArgs^ e) { } }; }
然后运行之
查看效果