0

Windows デバイス マネージャーで利用可能な情報の一部を (C# を介してプログラムで) 取得できるようにする必要があります。具体的には、[デバイス プロパティ] ダイアログ ボックスの [詳細] タブに関する情報を参照しています。私の場合、PC のネットワーク アダプタの「位置情報」プロパティを取得する必要があります。理想的には、WMI などを介した API 呼び出しを使用してこれを行うことをお勧めしますが、その方法を見つけたり理解したりすることができませんでした。とにかく、DevCon または一連の API 呼び出しを使用してこれを行う方法について誰かが情報を持っている場合は、助けていただければ幸いです。こちらの別の投稿でコードのサンプルを見つけました(以下にコピーしました) が、探している情報が得られませんでした。

        private static void test()
    {
        ManagementPath path = new ManagementPath();
        ManagementClass devs = null;
        path.Server = ".";
        path.NamespacePath = @"root\CIMV2";
        path.RelativePath = @"Win32_PnPentity";


        System.IO.File.Delete(fileName);

        using (devs = new ManagementClass(new ManagementScope(path), path, new ObjectGetOptions(null, new TimeSpan(0, 0, 0, 2), true)))
        {
            ManagementObjectCollection moc = devs.GetInstances();
            foreach (ManagementObject mo in moc)
            {
                try
                {
                    PropertyDataCollection devsProperties = mo.Properties;
                    foreach (PropertyData devProperty in devsProperties)
                    {
                        if (devProperty.Type == CimType.DateTime)
                        {
                            if (devProperty.Value != null)
                            {
                                Console.WriteLine("Date {0}", ToDateTime(devProperty.Value.ToString()));
                                System.IO.File.AppendAllText(fileName, "Date " + ToDateTime(devProperty.Value.ToString()) + Environment.NewLine);
                            }
                        }
                        else
                        {
                            Console.WriteLine("Property = {0}\t Value = {1}", devProperty.Name, devProperty.Value);
                            System.IO.File.AppendAllText(fileName, "Property = " + devProperty.Name + "\t Value = " + devProperty.Value + Environment.NewLine);
                        }
                    }

                    if (String.IsNullOrEmpty(mo["DeviceID"].ToString()))
                    {
                        System.IO.File.AppendAllText(fileName, "Device ID was NULL" + Environment.NewLine);
                        Console.WriteLine("****** Device ID was NULL ******");
                        continue;
                    }

                    int count = 0;
                    RelatedObjectQuery relatedQuery;

                    try
                    {
                        relatedQuery = new RelatedObjectQuery("associators of {Win32_PnPEntity.DeviceID='" + mo["DeviceID"] + "'}");
                        ManagementObjectSearcher searcher = new ManagementObjectSearcher(new ManagementScope(path), relatedQuery);
                        foreach (ManagementObject mob in searcher.Get())
                        {
                            System.IO.File.AppendAllText(fileName, "--------------------------->>>>>>" + Environment.NewLine);
                            Console.WriteLine("--------------------------->>>>>>");
                            System.IO.File.AppendAllText(fileName, mob["Description"].ToString() + Environment.NewLine);
                            Console.WriteLine(mob["Description"]);
                            ++count;
                        }
                    }
                    catch (Exception fEx)
                    {
                        string temp = fEx.Message;
                        continue;
                    }

                    System.IO.File.AppendAllText(fileName, "----------------------" + Environment.NewLine);
                    Console.WriteLine("----------------------");
                }
                catch (Exception fEx)
                {
                    string temp = fEx.Message;
                }
            }
4

1 に答える 1

0

私は自分でそれを理解しました!私はここに投稿された回答を使用し、彼が次の呼び出しを行った直後に1行のコードを追加して、わずかに変更しました:

string desc = GetDevicePropertyString(pNewDevInfoSet, devInfoData, SetupDiGetDeviceRegistryPropertyEnum.SPDRP_DEVICEDESC);

以下を追加しました。

string locationInformation = GetDevicePropertyString(pNewDevInfoSet, devInfoData, SetupDiGetDeviceRegistryPropertyEnum.SPDRP_LOCATION_INFORMATION);

投稿してからその投稿に返信してくれた元の人 (@domskey) に感謝します。彼がすべてのコードを書いたかどうかはわかりません。そこには、SetupAPI.dll 呼び出しをサポートするためのかなりの数のクラスがあります。時間を大幅に節約できました。

于 2016-11-18T21:59:17.160 に答える