none
System.Devices.Manufacturer为null值 RRS feed

  • 问题

  • using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    using Windows.ApplicationModel;
    using Windows.Devices.Enumeration.Pnp;
    using Windows.System.Profile;
    using System.Runtime.InteropServices.WindowsRuntime;
     
    namespace Utility
    {
        public class DeviceInfo
        {
            /// <summary>
            /// 获取设备的制造商,型号,唯一标志以及软件版本号.
            /// </summary>
            /// <returns></returns>
            public static async Task<string> GetDeviceInfo()
            {
                string result = string.Empty;
                string deviceModel = string.Empty;
                string deviceManufacturer = string.Empty;
                string uniqueId = string.Empty;
     
                string[] properties = { "System.Devices.ModelName", "System.Devices.Manufacturer"};
                string aqs = "System.Devices.LocalMachine:=System.StructuredQueryType.Boolean#True";//过滤条件:只选取localMachine为true的
     
                var containers = await PnpObject.FindAllAsync(PnpObjectType.DeviceContainer, properties, aqs);//查找出当前机器            
                if (containers != null && containers.Count > 0)
                {
                    var container = containers[0];
                    deviceModel = container.Properties[properties[0]].ToString();
                    deviceManufacturer = container.Properties[properties[1]].ToString();
                }
     
                var version = Package.Current.Id.Version;
     
                //下面是获取设备唯一标志的,需要的时候再用!
                //var token = HardwareIdentification.GetPackageSpecificToken(null);
                //var stream = token.Id.AsStream(); //; token.Id.AsStream();
     
                //using (var reader = new BinaryReader(stream))
                //{
                //    var bytes = reader.ReadBytes((int)stream.Length);
                //    uniqueId = BitConverter.ToString(bytes);
                //}
     
     
                result = string.Format("{0}_{1}__V{2}.{3}.{4}", deviceManufacturer, deviceModel, version.Major, version.Minor, version.Build);
     
                return result;
            }
        }
    }
    

    在以上代码中我取到的deviceModel 与deviceManufacturer 均为null值,可能我用的不是品牌机没有这些信息,我想知道System.Devices.Manufacturer的值能否通过注册表修改之类添加上去?另这段代码能正常取到值

    算神的博客

    2012年9月1日 7:44

答案

  • 并有任何资料显示我们是可以修改这个值的,确实,品牌厂商会设置这个值,在我这里, 控制面板\硬件和声音\设备和打印机 中设备 你的电脑显示的制造商和型号 是有设置的,但是组装的机器就没有此值。


    Bob Bao [MSFT]
    MSDN Community Support | Feedback to us

    • 已标记为答案 算神 2012年9月3日 10:52
    2012年9月3日 6:57
    版主