使用Javascript在Windows 8应用程序中获取计算机制造商和型号#

时间:2013-02-12 01:29:27

标签: javascript windows

我正在尝试获取有关运行我的应用的计算机/平板电脑的信息。这是出于分析目的。具体来说,我想了解制造商和型号#。

理想情况下,我会得到以下信息:

Manufacturer: Toshiba
Model: Satellite S850-BT3N22 

但我会尽我所能。我花了一些时间尝试自己的解决方案以及在SO上找到它,但我无法找到解决方案。

我花了一些时间试图解决这个问题:

var hardwareToken = Windows.System.Profile.HardwareIdentification.getPackageSpecificToken(null);
var idReader = Windows.Storage.Streams.DataReader.fromBuffer(hardwareToken.id);        
var idArray = new Array(hardwareToken.id.length);
idReader.readBytes(idArray);

所以现在idArray是一个整数数组。我已经尝试将这个字节数组转换为String,但它将它转换为一堆看起来像汉字的字符串。我认为这不是这个hardwareToken.id的意思。以下是idReader数组的javascript控制台的示例输出:

idArray.toString();
"3,0,26,139,5,0,90,224,6,0,1,0,4,0,246,50,1,0,248,181,2,0,80,124,9,0,250,137"

我尝试的下一件事是在这里模仿msdn的“Device Enumeration Sample”: http://code.msdn.microsoft.com/windowsapps/Device-Enumeration-Sample-a6e45169

由此我可以看到我的网络上有几个不同的设备,我能够获得System.ItemNameDisplay和System.Devices.ModelName,但是我没有看到区分哪个设备的方法电脑。它提供了所有Pnp设备。

如果有人能帮助我获取这些信息,我将非常感激。

3 个答案:

答案 0 :(得分:0)

您可以尝试使用BrowserSpy之类的内容来获取此信息。他们几乎处于这个领域的最前沿。

据我所知,没有纯粹的Javascript方式。

您可以找到更多信息here

就您指定的电话而言,您可以找到以下信息:

CPU ID of the processor
Size of the memory
Serial number of the disk device
Network adapter (such as NIC MAC address)
Audio adapter
Docking station
Bluetooth address
Mobile broadband device ID
BIOS

答案 1 :(得分:0)

我得到了一个答案:

使用Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation,如下所示:

var deviceInfo = new Windows.Security.ExchangeActiveSyncProvisioning.EasClientDeviceInformation();
var manufacturer = deviceInfo.systemManufacturer;
var productName = deviceInfo.systemProductName;

这里是样本数据:

manufacturer: SAMSUNG ELECTRONICS CO., LTD.
productName: 700Z3A/700Z4A/700Z5A/700Z5B

答案 2 :(得分:0)

我今天只需处理这个问题。关键是要查看DeviceContainer上的System.Devices.LocalMachine属性,如果设备代表本地系统,则该属性为true(请参阅设备容器属性)。

以下是基于MS设备枚举样本的快速C#示例;希望能够很容易地采用该样本的JS版本并以相同的方式对其进行调整:

string[] properties = { "System.Devices.LocalMachine", "System.ItemNameDisplay", "System.Devices.ModelName", "System.Devices.ModelNumber", "System.Devices.Manufacturer" };
var containers = await PnpObject.FindAllAsync(PnpObjectType.DeviceContainer, properties);

foreach (PnpObject container in containers)
{
    bool localMachine = (bool)container.Properties["System.Devices.LocalMachine"];
    if (localMachine)
    {
        string name = (string)container.Properties["System.ItemNameDisplay"];
        string modelName = (string)container.Properties["System.Devices.ModelName"];
        string modelNumber = (string)container.Properties["System.Devices.ModelNumber"];
        string manufacturer = (string)container.Properties["System.Devices.Manufacturer"];
        // do as you like now...
        break;
    }
}